C#6.0新增的特性 NULL条件运算符 ?.

之前我们在需要判断某个对象是否为空的是这样的

Person per = null;

            if (per != null)
{
Console.Write("");
}

如果我们不这样判断的话,那么你就会得到一个 System.NullReferenceException  错误,

当然你也可以使用三元运算符

string str=person == null ? null :person.Name

但是在C#6.0的时候推出 NULL条件运算符,这样就使我们少写了很多代码,增加了我们很多的工作效率

?. NULL条件运算符

 Person per = null;

            string name = per?.Name;

如果我们这样写的话,同样也可以判断是否为空,代替了if的判断和简化了三元运算符的操作

例子:

我们尝试一下,在一个集合中

  List<Person> person = new List<Person>()
{
new Person{ Name="张三",Age=},
new Person{ Name="李四",Age=},
new Person{ Name=null,Age=},
new Person{ Name="张三",Age=},
};

我们需要查找姓是李的人,如果我们不使用NULL条件运算符,结果是..

不出意料,因为Name中存在NUll值,所以得到了一个System.NullReferenceException

这次我们加上NULL条件运算符,结果...

加上NULL条件运算符之后,返回类型发生了改变,变成了Nullable<T>,如果我们还需要原来的类型,只需要和空运算符一起使用就可以了

因为返回的是bool类型,那我们看一下false返回的是什么

就会返回符合条件的值

如果为true又会返回什么呢

我们可以清晰的可以看到,为true的时候,不仅返回符合条件的数据,同时也返回了Name为空的值

 ?[

NULL运算符不但可以使用?.访问对象的属性和方法,还可以使用?[监测数组或包含索引器的对象是否为空

int[] are = new int[] { , , , ,  };

            int? value = are?.Length;

            int? result = are?[];

NULL条件运算符返回的类型是Nullable<T>,我们不想要这样的类型的话需要配合 ?? 空运算符使用

?? 空运算符

int[] are = new int[] { , , , ,  };

            int value = are?.Length??;

            int result = are?[]??;

C#NULL条件运算符的更多相关文章

  1. Unity中使用C#的null条件运算符?.的注意事项

    Introduction: 在C#6及以上版本中,加入了一项特别好用的运算符:Null条件运算符?.和?[]可以用来方便的执行判空操作,当运算符左侧操作数不为null时才会进行访问操作,否则直接返回n ...

  2. [C#6] 3-null 条件运算符

    0. 目录 C#6 新增特性目录 1. 老版本的代码 namespace csharp6 { internal class Person { public string Name { get; set ...

  3. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  4. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  5. C#与C++的发展历程第四 - C#6的新时代

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. 【转】C# 中 10 个你真的应该学习(和使用!)的功能

    如果你开始探索C#或决定扩展你的知识,那么你应该学习这些有用的语言功能,这样做有助于简化代码,避免错误,节省大量的时间. 1)async / await 使用async / await-pattern ...

  7. [C#6] 0-概览

    1. C#6 新特性图谱 C#6的新特性主要由编译器(“Roslyn”)带来,并不依赖CLR和.NET Framework的升级,我们可以认为这个版本的新语言特性的主要目的为了简化代码书写方式,让我们 ...

  8. C# 6.0

    C# 6.0 的新语法特性   回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都 ...

  9. 从NullObject谈C#6.0改进

    前言 本文来聊一聊我们经常会做的空值检查问题,从一个简单的空值检查Any Where,到设计模式的NullObjectPattern,再到C#6.0“可能”会提供的语法,让我们体验一次语言开发上的“持 ...

随机推荐

  1. 华为云ModelArts图深度学习,学习知识还能考取微认证

    作为人工智能最前沿的技术之一,图深度学习被公认是人工智能认识世界实现因果推理的关键,也是深度学习未来发展的方向.但深度学习对图数据模型的支持性差一直是众多研究者难以攻克的难点,因此图深度学习在实际生产 ...

  2. 详细nginx配置SSL

    1.nginx的ssl 让nginx实现用https来访问网站,http是80端口,https是443端口. https其实就是一种加密的http 2.为什么要加密 例子:在网上银行汇款,在你汇款的过 ...

  3. hibernate的查询方式的介绍(一)

    1.对象导航查询 2.OID查询 3.hql(hibernate query language)查询 4.QBC查询 5.本地sql查询 在这里先介绍其中两种 1.hibernate的对象导航查询 ( ...

  4. vue 各种打包坑

    1,报错 Refused to load the image 'http://localhost:8080/favicon.ico' because it violates the following ...

  5. 带你从头到尾捋一遍MySQL索引结构(2)

    前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家. 这篇博客我会谈谈对于索引结构我自己的看法,以 ...

  6. hdu2199,double二分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2199 题意:给一个Y,求满足8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y的 ...

  7. sql service 从创建访问用户到数据库访问 【SQL】

    create login [LoginMame] with password=[Pwd]--创建数据库登陆用户 create user [DBLoginName] for login [LoginMa ...

  8. 每周一练 之 数据结构与算法(Set)

    这是第四周的练习题,五一放假结束,该收拾好状态啦. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数据结构与算法(LinkedList) 2.每周一练 之 ...

  9. rails 构建 API

    我是来鼓吹使用 Rails 写 API 的. 原文在此: https://labs.kollegorna.se/blog/2015/04/build-an-api-now/ 原文有一个很大的缺陷就是读 ...

  10. 【玩转SpringBoot】用好条件相关注解,开启自动配置之门

    自动配置隐含两层含义,要搞清楚 上帝让程序员的发量减少,是为了让他变得更聪明,如果有一天聪明到了极点,那就是绝顶聪明. 据说在大脑高速运转下,这样更有利于散热,不至于核心温度过高而产生告警. 聪明的大 ...