IL 手動處理裝箱Box

2021-08-22 15:52:47 字數 1058 閱讀 1164

我們假設靜態類

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裝箱值型別後,再賦值給屬性,如:

//callvaluetype[mscorlib]system.datetime[mscorlib]system.datetime::get_now()

box[mscorlib]system.datetime

callvirtinstance

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...