商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

手动处理装箱Box

作者:ITPUB论坛  2008-05-09

【IT168技术文档】

  我们假设静态类DataHelper类有一个静态方法:
public static object GetSafeDbValue(object val) { if (val != null) { return val; } return DBNull.Value; }
  GetSafeDbValue用于在为DbParameter赋值前,检查要赋的值是否为null,如果是,则使用DBNull.Value替换。
ok,如果我在IL中这样来调用GetSafeDbValue:
ldc.i4.s 12 call object [DataRabbit]DataRabbit.DataHelper::GetSafeDbValue(object)
  则在运行时会抛出异常而导致应用程序退出,原因在于GetSafeDbValue接收的是一个引用类型的参数,而常数12是值类型的,所以必须先装箱:
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)
1
【内容导航】
第1页: 概述
©版权所有。未经许可,不得转载。
[责任编辑:nancy]