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 类,我们可能获取到空的数据对象(此处直接赋值为空),后续直接调用其方法就会引发异常,

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

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

 

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

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

  

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

 

posted @ 2020-07-25 20:57  宿春磊Charles  阅读(388)  评论(0编辑  收藏  举报