C# 6.0 (C# vNext) 新功能之:Null-Conditional Operator(转)
Null-Conditional Operator 也叫 Null propagating operator 也叫 Safe Navigation Operator
看名字,应该就有点概念了。如果还不知道,提示一下:
有个叫 Conditional Operator 条件运算符(?:)
也就是常会用到的:
- var result = (1 > 2) ? true : false;
当括号内的结果为 true 时,回传第一个值,如果为 false 回传第二个值。
另外有一种:null-coalescing operator (??)
比如:
int? x = null;
int y = x ?? -1;
当 x 不为 null 时,则将其值给 y, 否则 y 被指定为 -1
C# 6.0 新的 Null-Conditional Operator 应该可以叫做 null条件运算符
使用如下:
C# 6.0 之前的写法:
- var temp = GetCustomer();
- string name = (temp == null) ? null : temp.name;
C# 6.0 的新写法
- var temp = GetCustomer()?.name;
也就是当 GetCustomer() 回传值不为 null 时,取 name 的值给 temp 变量
其他的例子:
- x?.Dispose(); // 当 x 不为 null 时才呼叫 Dispose 方法
例子:
- event EventHandler OnFired;
- void Fire()
- {
- OnFired?.Invoke(this, new EventArgs());
- }
当 OnFired 事件不为 null (有人注册该事件)时,才呼叫 Invoke 方法
例子:
以前的写法:
- public static string Truncate(string value, int length)
- {
- string result = value;
- if (value != null)
- {
- result = value.Substring(0, Math.Min(value.Length, length));
- }
- return result;
- }
新写法:
- public static string Truncate(string value, int length)
- {
- return value?.Substring(0, Math.Min(value.Length, length));
- }
C# 6.0 (C# vNext) 新功能之:Null-Conditional Operator(转)的更多相关文章
- MySQL 8.0有什么新功能
https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/ 我们自豪地宣布MySQL 8.0的一般可用性. 现在下载 ...
- Bash 5.0 发布及其新功能
导读 邮件列表证实最近发布了 Bash-5.0.而且,令人兴奋的是它还有新的功能和变量.如果你一直在使用 Bash 4.4.XX,那么你一定会喜欢 Bash 的第五个主要版本. 第五个版本侧重于新的 ...
- Kafka 0.11版本新功能介绍 —— 空消费组延时rebalance
在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer instance启动的时间不可控,很有可能超出coordinator确定 ...
- Android Studio 3.0 下载 使用新功能介绍
谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快.(英语一般,有些翻译不太好) 下载地址 https://developer.android.g ...
- 干货来袭:Redis5.0支持的新功能说明
Redis5.0支持的新特性说明 本文内容来自华为云帮助中心 华为云DCS的Redis5.x版本继承了4.x版本的所有功能增强以及新的命令,同时还兼容开源Redis5.x版本的新增特性. Stream ...
- Redis4.0支持的新功能说明
本文以华为云DCS for Redis版本为例,介绍Redis4.0的新功能.文章转载自华为云帮助中心. 与Redis3.x版本相比,DCS的Redis4.x以上版本,除了开源Redis增加的特性之外 ...
- React Native 0.50版本新功能简介
React Native在2017年经历了众多版本的迭代,从接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...
- Apache Kafka 0.11版本新功能简介
Apache Kafka近日推出0.11版本.这是一个里程碑式的大版本,特别是Kafka从这个版本开始支持“exactly-once”语义(下称EOS, exactly-once semantics) ...
- 161128、Redis 4.0发布及其新功能介绍
Redis 4.0-rc1 发布了,这是 4.0 的首个 RC 版.Redis 是一个高性能的key-value数据库.Redis 的出现,很大程度补偿了memcached这类keyvalue存储的不 ...
随机推荐
- [转载]java自带线程池和队列详细讲解
FROM:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中 ...
- ElasticSearch获取指定Field数据的Java方法
ElasticSearch(ES)检索后需要结果时,可能通过source接口读出.但是这样的话,返回的结果会很多.在调用search方法时,我们可以添加addfield或addfields方法,仅仅读 ...
- 【HTML 元素】标记文字
1.用基本的文字元素标记内容 先看显示效果: 对应HTML代码: <!DOCTYPE html> <html lang="en"> <head> ...
- scss使用后的简单入门总结
端午节第一天 将之前做的一个小demo的css样式改为了scss 好吧 改完了 赶紧由小兵 升级到中尉了 什么是scss? 我的理解是scss 就是css 的预处理器,使css变得更加富有逻辑. 有什 ...
- uva 12627 - Erratic Expansion(递归求解)
递归的边界条件写的多了--不是必需写呢么多的.. 不明确可共同探讨~ #include<cstdio> #include<iostream> #include<cmath ...
- SDUTOJ 2804求二叉树的深度
#include<iostream> #include<stdlib.h> #include<string.h> using namespace std; char ...
- Hive命令行经常使用操作(数据库操作,表操作)
数据库操作 查看全部的数据库 hive> show databases ; 使用数据库default hive> use default; 查看数据库信息 hive > descri ...
- Notepad++搭配MinGW 配置编译运行C/C++
1. Notepad++与Dev-Cpp都能编译运行, 环境变量的设置: 在PATH中加入"Dev-Cpp的MinGW64下的bin", 这是寻找gcc编译器的路径. 新建LIBR ...
- 多数据源动态关联报表的制作(birt为例)
使用Jasper或BIRT等报表工具时,常会碰到一些很规的统计,用报表工具本身或SQL都难以处理,比方与主表相关的子表分布在多个数据库中,报表要展现这些数据源动态关联的结果.集算器具有结构化强计算引擎 ...
- HDU 4738 Caocao's Bridges(找割边)
HDU 4738 Caocao's Bridges 题目链接 注意几个坑,可能重边,至少要派一个人去炸,没有连通的时候就不用炸了 代码: #include <cstdio> #includ ...