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. Thymeleaf语法

    Thymeleaf 官网:https://www.thymeleaf.org/ 1.入门示例 (1)在controller编写一个请求,放进去一些数据: @RequestMapping("/ ...

  2. kubernetes学习笔记(三)——利用kubeadm部署集群

    文章目录 (一)安装前准备 (二)master安装 1.安装组件 2.排错 (三)node安装 1.安装组件 2.加入master 3.排错 (四)网络安装 (五)dashboard安装 (一)安装前 ...

  3. SPOJ Free TourII(点分治+启发式合并)

    After the success of 2nd anniversary (take a look at problem FTOUR for more details), this 3rd year, ...

  4. HDU1517 Multiply Game

    Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 t ...

  5. CSUOJ2031-Barareh on Fire(双向BFS)

    Barareh on Fire Submit Page Description The Barareh village is on fire due to the attack of the virt ...

  6. HDU1885 Key Task

    The Czech Technical University is rather old — you already know that it celebrates 300 years of its ...

  7. centos7下ldap+kerberos实现单点登陆

    一. LDAP概念 http://wiki.jabbercn.org/index.php/OpenLDAP2.4%E7%AE%A1%E7%90%86%E5%91%98%E6%8C%87%E5%8D%9 ...

  8. 【Vuejs】335-(超全) Vue 项目性能优化实践指南

    点击上方"前端自习课"关注,学习起来~ 前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 D ...

  9. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  10. 《吊打面试官》系列-ConcurrentHashMap & HashTable

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和 ...