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

  • 相关阅读:
    HTML页面之间跳转传值
    Ajax之三种数据传输格式
    css选择器
    jQuery Validate
    正则表达式
    JSP的九大内置对象,七大动作指令,四个作用域,三个编译指令
    Zooeeper之paxos算法
    ZooKeeper之选举(fastleaderelection算法)
    ZooKeeper之ZAB协议
    ZooKeeper之三阶段提交(3PC)
  • 原文地址:https://www.cnblogs.com/feichexia/p/CSharpNullableDynamic.html
Copyright © 2020-2023  润新知