我們假設靜態類
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...