我们假设静态类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是值类型的,所以必须先装箱:

        ldc.i4.s 12
        box int32
        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)

转载于:https://www.cnblogs.com/zhuweisky/archive/2008/05/05/1183449.html

IL -- 手动处理装箱Box相关推荐

  1. 手动脱Mole Box壳实战总结

    作者:Fly2015 这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,这些都是广告,能够直接无视了.前面的博客手动脱Mole Box V2.6.5壳实战中已经给 ...

  2. 浅谈.NET中的类型和装箱、拆箱原理

    谈到装箱拆箱,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么建议你花点时间看看楼主这篇文章 1. .NET中的类型 为了 ...

  3. [C#] C# 知识回顾 - 装箱与拆箱

    装箱与拆箱 目录 生活中的装箱与拆箱 C# 的装箱与拆箱 值类型和引用类型 装箱 拆箱 读者见解 生活中的装箱与拆箱    我们习惯了在网上购物,这次你想买本编程书 -- <C 语言从入门到放弃 ...

  4. 浅C#中的装箱和拆箱

    1.什么是装箱和拆箱? 简单的来说: 装箱就是值类型转换为引用类型:拆箱就是引用类型转换为值类型 值类型,包括原类型(Sbyte.Byte.Short.Ushort.Int.Uint.Long.Ulo ...

  5. java bufferedwriter会自动创建文件吗_Java中为什么会有包装类?自动拆装箱必要吗?关于Wrapping Class这是重点!...

    入题 自动封箱与拆箱人人皆可言之道之,但封箱和拆箱却被多数人略之!如此简单的一个机制,却影射着Java的核心理念,不清楚?继续向下看吧~ Java中的数据类别 目前Java中的数据类别分为两种,一种是 ...

  6. 对C#装箱和拆箱的理解

    [什么是装箱和拆箱] 装箱(box)是将值类型转换为引用类型的过程,拆箱(unbox)是将引用类型转换为值类型的过程 [装箱过程] 先在堆上分配存储位置.(注解:引用类型的数据值放在堆中) 将值类型数 ...

  7. 什么是自动拆箱和自动装箱

    什么是自动拆箱和自动装箱 Java中基本类型有八种,可以分为四类: 整形: byte(一个字节来存储,范围为-2^7- 2^7-1), short (两个字节来存储,范围为-2^15- 2^15-1) ...

  8. 代码大全 MSIL语言程序设计

    .NET平台的编译器会将高级语言(C#,VB.NET,F#)编译成MSIL(微软中间语言)格式.熟悉MSIL语言,可以读懂一些加密程序混淆过的算法,这些算法几乎不能还原成高级语言,但是可以还原成MSI ...

  9. 安装 Homestead 可能会出现的一些 Problems

    最近我在公司的新电脑配置新的开发环境,从而了解了一下在安装 Homestead 可能会出现的问题. 一开始用的是 win7 ,但发现 win7 中使用 VirtualBox 会有不少 兼容性 的问题. ...

  10. java常见对象_Java/10_Java常见对象.md at master · DuHouAn/Java · GitHub

    Java常见对象 Arrays Arrays:针对数组进行操作的工具类. Arrays的常用成员方法: public static String toString(int[] a) //把数组转成字符 ...

最新文章

  1. 2018新秀杯a城轨司机调度_城市轨道交通行车调度问题与优化方式研究
  2. 初等数论--同余方程--二元一次不定方程的通解形式
  3. 第二单元作业——电梯模拟总结
  4. 学姐,来挑战字节最牛部门
  5. [NOIP2003]传染病控制题解
  6. 零基础编程入门基础语句!小白必点,大牛绕道!
  7. 设计模式之GOF23桥接模式
  8. 软件需求说明书模板1
  9. 定时任务cron表达式工具
  10. Hexo next 主题加载自定义 js 文件
  11. 如何将Figma转成蓝湖教程
  12. skb_buff操作
  13. 标识符(Identifier)
  14. Vue中过滤器和自定义指令详解
  15. karaf学习 (2)
  16. Android App加载图片内存空间计算
  17. 实时显示当前时间,每秒更新
  18. python打包成exe fail to ex_“failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误...
  19. 计算机二级python基础知识总结-江苏省计算机二级python样卷
  20. 多线程:线程同步与死锁(卖票案例)、线程通信、生产者与消费者

热门文章

  1. 轻松一刻,python乌龟绘图-小猪佩奇,可爱乌龟,新冠病毒
  2. PDF文本内容批量提取到Excel
  3. mysql动态代理_动态代理连接数据库
  4. oracle9.2.0.7,Oracle9.2.0.1升级到9.2.0.7
  5. java静态方法没有this,super与this无法用在static方法中
  6. 如何让sublime编译c语言,如何在Sublime Text 3中编译C程序?
  7. take android,Protake
  8. 翻译: 2.6 概率论 深入神经网络 pytorch
  9. 易筋SpringBoot 2.1 | 第十七篇:SpringBoot的事务Transaction
  10. 数学建模——层次分析法