我們假設靜態類
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裝箱值型別後,再賦值給屬性,如: //
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...