在引入nameof操作符的同时,C# 6.0 还引入了Null-Conditional操作符。它使开发者可以检查object引用链中的null值。这个null-conditional 操作符写作"?.",会在引用链中任一个为null时返回null。这避免了对每一级进行null检查。

假设我们有一个class为Student,它有一个属性Address,同时这个属性的type是一个名为Address的Class。现在我们用下面的代码块来print它的HomeAddress。

if (student != null && student.Address != null)
{
WriteLine(student.Address.HomeAddress);
}
else
{
WriteLine("No Home Address");
}

我们可以看到,为了避免null-reference exception,我们不得不检查student是否为null,然后检查student.Address是否为null。

现在,上面的代码会通过使用null-conditional(?.)操作符来重写成:

WriteLine(student?.Address?.HomeAddress ?? "No Home Address");

是不是很帅?不必分别检查每个对象,使用“?.”我们可以同时检查整个引用链。任意一级为null,它都会返回null。下面的图片解释了“?.”是怎么工作的。

它也可以和方法协同工作,特别是当我们trigger event的时候。比如下面的代码

if (AddressChanged != null)
{
AddressChanged (this, EventArgs.Empty);
}

使用?.我们可以这样写。

AddressChanged ?.Invoke(this, EventArgs.Empty)

C# 6.0:Null – Conditional 操作符的更多相关文章

  1. NULL合并操作符??

    参考官方手册: /** * NULL合并操作符 ?? */ // $a, $b, $c都未声明和定义 var_dump($a??$b??$c); // NULL // $a为数组,$b为100,$c为 ...

  2. php中0," ",null和false的区别

    php中很多还不懂php中0,"",null和false之间的区别,这些区别有时会影响到数据判断的正确性和安全性,给程序的测试运行造成很多麻烦.先看一个例子: <? $str ...

  3. 0,null,empty,空,false,isset

    <?php header("Content-type: text/html; charset=utf-8"); $a=0; //1. if($a==0) { echo $a; ...

  4. '0','\0',NULL,EOF的区别

    要看是不是一个东西,打印一下即可 printf("%d %d %d %d\n",'0','\0',NULL,EOF); 输出: 48 0 0 -1 结论: '\0'与NULL 都是 ...

  5. 0,null,undefined,[],{},'',false之间的关系

    0与一些虚值的比较: 0与false 0==false true 0与'': =='' true 0与[]: ==[] true 0与NaN: 0==NaN false 0与undefined 0== ...

  6. myBatis-plus异常提示For input string: "{0=null}"

    异常信息 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Per ...

  7. php 0,null,empty,空,false,字符串关系(转)

    在php中由于是弱类型语言,不同类型值之间可以隐式转换,使得false,null,”,0,’0′这几个值的比较有些混乱,现总结一下: //相等判断 '' == NULL == 0 == false ( ...

  8. 0,'0','\0',NULL的区别

    0,'0','\0',NULL的区别 1,0是一个值,可以是char ,int ,float,double等类型: 2,'0'是一个字符(char)类型,它的ASCII码值是48: 3,'\0'也是一 ...

  9. 空指针/0/NULL

    空指针/0/NULL 空指针是一个被赋值为0的指针,在没有被具体初始化之前,其值为0. NULL 是一个标准规定的宏定义,用来表示空指针常量. #define NULL 0   或者 #define ...

随机推荐

  1. int 和 Integer

    现状1+1=?,不加思索2.有一个数字要存储在程序里,不加思索int.那为什么java要弄一个Integer类型出来?有什么用?怎么用?差别在哪儿?度娘说java提供了两种数据类型,一种是值类型,一种 ...

  2. navicat premium 安装破解(Mac & win)

    1.windows请参考以下连接: https://www.jianshu.com/p/5f693b4c9468 2.mac安装教程 下载:http://www.pc6.com/mac/111878. ...

  3. Hive与HBase表联合使用Join的问题

    hive与hbase表结合级联查询的问题,主要hive两个表以上涉及到join操作,就会长时间卡住,查询日志也不报错,也不会出现mr的进度百分比显示,shell显示如下图 如图: 解决这个问题,需要修 ...

  4. SublimeText 3200 package Control 安装

    写一点自己的坑 花了2个小时时间才弄好 先上干货 https://github.com/wbond/package_control 这里直接 Clone zip 解压 后将整个文件夹改名为 " ...

  5. java高级进阶

  6. es6学习笔记-Proxy、Reflect、Promise

    Proxy Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy 可以理解成,在目标对象之前 ...

  7. CF867E: Buy Low Sell High(贪心, STL) (hdu6438)

    Description 有nn个城市,第ii个城市商品价格为aiai​,从11城市出发依次经过这nn个城市到达n n城市,在每个城市可以把手头商品出售也可以至多买一个商品,问最大收益. Input 第 ...

  8. SQLI DUMB SERIES-19

    (1)根据题意,从Referer入手 (2)报错注入与上一关相同.如爆库名: 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) an ...

  9. 小妖精的完美游戏教室——东方PROJECT,同人,墙

    //================================================================//// Copyright (C) 东方同人社// All Rig ...

  10. redis(4.0.11)编译安装

    一: redis数据库安装 系统环境:linux系统(centos/redhat):Red Hat Enterprise Linux Server release 6.8 (Santiago) red ...