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异常。