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

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

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

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

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

      

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

  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13377800.html
Copyright © 2011-2022 走看看