• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
flashpast
博客园    首页    新随笔    联系   管理    订阅  订阅

浅谈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()方法的时候,都需要先进行装箱操作。

posted @ 2009-10-24 22:04  flashpast  阅读(510)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3