浅谈Nullable<T>.GetType()

  • 先看看下边的代码:
         class  Program
        {
            
    static   void  Main( string [] args)
            {
                Nullable
    < int >  a  =   1 ;
                Console.WriteLine(a.GetType().ToString());
                Console.Read();
            }
        }
  • 对于初学者来说,往往会认为这段程序运行的结果是如下:
    System.Nullable` 1 [System.Int32]
  • 但运行的结果却是如下:
    System.Int32
  • 我们先用反汇编程序查看下:
      IL_000a:  ldloc. 0
      IL_000b:  box       valuetype [mscorlib]System.Nullable`
    1 < int32 >
      IL_0010:  callvirt   instance 
    class  [mscorlib]System.Type [mscorlib]System.Object::GetType()
      IL_0015:  callvirt   instance 
    string  [mscorlib]System.Object::ToString()
      IL_001a:  call       
    void  [mscorlib]System.Console::WriteLine( string )
  • 从中我们会发现,当我们调用GetType()方法的时候,a对象先进行了装箱(box),在托管堆的对象是Int32类型。
    在.NET中,值类型对象在调用GetType()方法的时候,都需要先进行装箱操作。

转载于:https://www.cnblogs.com/flashpast/archive/2009/10/24/1589307.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值