public static Display(dynamic attribute)
{
   return attribute.ToString();
}

当像下面这样调用:

int? i = default (int?);
Display(i);

将抛出异常“无法对 null 引用执行运行时绑定”。
dynamic不是一种CLR类型,它的动态特性是由.NET框架中的类实现的。Runtime binders(运行时绑定器)会对dynamic类型变量执行动态查找。.NET编译器会将实际CLR类型写入IL中。注意:

1、dynamic类型变量在IL中被表示未System.Object,CLR中没有dynamic类型
2、C#编译器根据实际传入的参数决定该如何调用dynamic类型变量的成员

nullable类型装箱(boxed)
   当对一个可空类型进行装箱操作时,CLR获取可空类型对应的值类型的值,然后将这个值装箱。
比如对于int?可空类型,CLR先获取int?转成值类型int的值,然后将这个值装箱。而如果int?为null,那么执行装箱操作时就会出现null reference错误。

nullable类型转成dynamic类型
   nullable类型转成dynamic类型实际上是将nullable类型装箱成引用类型。
而上面的default (int?)的值为null,对null进行装箱就将抛null reference异常。

posted on 2012-11-21 15:15  feichexia  阅读(1383)  评论(0编辑  收藏  举报