zoukankan      html  css  js  c++  java
  • dynamic和nullable一起使用时的注意

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

  • 相关阅读:
    报表设计器的使用之一:入门
    统计图开发之二:点图元
    统计图开发之一:画法定义
    集算器之五:序表
    集算器之四:程序流程
    忏悔录
    请不要离我而去
    所想和所做 所梦和所成
    做出改变,不断改变。
    Linux 操作命令
  • 原文地址:https://www.cnblogs.com/feichexia/p/CSharpNullableDynamic.html
Copyright © 2011-2022 走看看