IL 手動處理裝箱Box

2021-05-06 23:19:21 字數 1116 閱讀 8429

我們假設靜態類

datahelper類有乙個靜態方法:

public

static

object

getsafedbvalue(

object

val)

return

dbnull.value;

}      

getsafedbvalue用於在為dbparameter賦值前,檢查要賦的值是否為null,如果是,則使用

dbnull.value替換。

ok,如果我在il中這樣來呼叫

getsafedbvalue:

ldc.i4.s 

12call 

object

[datarabbit]datarabbit.datahelper::getsafedbvalue(

object)

則在執行時會丟擲異常而導致應用程式退出,原因在於getsafedbvalue接收的是乙個引用型別的引數,而常數12是值型別的,所以必須先裝箱:

ldc.i4.s 

12boxint32

call 

object

[datarabbit]datarabbit.datahelper::getsafedbvalue(

object

)     

像上面這種情況稍加留心就可以注意到,但是在為乙個object型別的屬性賦值時,就不是那麼明顯了,這個時候仍然需要先通過box裝箱值型別後,再賦值給屬性,如:

//獲取要賦值的idataparameter,然後

call valuetype [mscorlib]system.datetime [mscorlib]system.datetime::get_now()

box [mscorlib]system.datetime

callvirt instance 

void

[system.data]system.data.idataparameter::set_value(

object)

IL 手動處理裝箱Box

我們假設靜態類 datahelper類有乙個靜態方法 public static object getsafedbvalue object val return dbnull.value getsafedbvalue用於在為dbparameter賦值前,檢查要賦的值是否為null,如果是,則使用 d...

IL 手動處理裝箱Box

我們假設靜態類 datahelper類有乙個靜態方法 public static object getsafedbvalue object val return dbnull.value getsafedbvalue用於在為dbparameter賦值前,檢查要賦的值是否為null,如果是,則使用 d...

IL 手動處理裝箱Box

我們假設靜態類datahelper類有乙個靜態方法 public static object getsafedbvalue object val return dbnull.value getsafedbvalue用於在為dbparameter賦值前,檢查要賦的值是否為null,如果是,則使用dbn...