zoukankan      html  css  js  c++  java
  • C#可空类型及其衍生运算符

    这节讲一下C#可空类型(Nullable)

        我们知道,值类型在使用前必须设置值,而引用类型则可以是null,但在某些情况下,为值类型设置为空是必要的(如处理数据库数据的时候),微软因此推出了可空类型 System.Nullable<T> 这是一个泛型类,其中,T就代表一个具体的值类型。

            在声明和使用中,以下两种情况是不允许的:

            以下情况则可以(了解VS的同学会知道,类型颜色变灰说明此处可以简化,这就涉及到它的一个衍生运算符,我们后边讲):

        可空类型,可以像引用类型一样,判断是否为空,而且它还有一对属性,HasValue/Value,从字面不难理解,一个是判断其是否有值,一个是取值。

        注意,如果没有值,强行访问Value属性,会引发System.InvalidOperationException异常。

        可空类型很有用,为此微软新添了一批语法,声明可空类型,可以使用一下语法:

         T?和System.Nullable<T>等价,因此用System.Nullable<T>声明对象的时候,编译器会灰化声明代码,因为有简化的T?语法。

        

        ?? 运算符

        为了进一步简化处理可空类型的代码量,微软引入 ?? 运算符 ,这个运算符叫空结合运算符(null coalescing operator)  ,这是一个二元运算符,目的是为了数据为空的情况下,提供默认值

        a为空,就返回1,用法很简单,a不为空,返回a的值,这种用法,避免使用if等复杂的代码块,提高了程序可读性。

        ?.运算符

        为了避免可空类型或者引用类型在空引用时引发的NullReferenceException异常,微软又引入了 ?. 空条件运算符,请看代码(举个稍微不恰当的例子):

        ​有一 Person 类,我们可能获取到空的数据对象(此处直接赋值为空),后续直接调用其方法就会引发异常,

        ​下面改用空条件运算符,程序正常运行

        ​我们可以配合 ?? 运算符简化代码

        ​注意,?? 运算符两边的类型必须一致 

        ​从错误提示中,我们也可以得知,?? 不能应用于不同类型​

      

      这是我的公众号二维码,获取最新文章,请关注我的公众号

  • 相关阅读:
    JVM学习笔记(三)——类加载机制
    JVM学习笔记(二)——垃圾收集器和内存分配策略
    JVM学习笔记(一) ——Java虚拟机内存结构
    KMP算法及next数组优化
    C Primer Plus课后编程习题
    【小白出错日记】C语言篇
    C语言学习重点提纲
    编译原理学习-形式语言 乔姆斯基文法
    3.11上午课程重点
    FPGA学习-PS2接口
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13377800.html
Copyright © 2011-2022 走看看