C# 6.0/7.0 的新特性
转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅。
C# 7.0 新特性
- 增强的ref
- 可以对值变量传递引用 ref int b = ref a;
- 可以对返回值返回引用 return ref x;
- 自动创建 out 变量
- 增强的元组(需要扩展包支持,Install-Package System.ValueTuple)
- 命名返回值 (int a, int b) GetValue() => (1, 2);
- 属性式取值 var data = GetValue();(使用data.a、data.b访问)
- 直接式取值 (int a, int b) = GetValue();(直接用a、b访问)
- 增强的is
- 类型正确直接赋值 a is int b
- 类型选择语句 switch (a) case int b: ... case string c: ...
- 增强的类型选择语句 case int b when b < 0: ...
- 局部函数(在函数体中定义一个小函数,只能函数体中访问)
- 增强的函数表达式
- 支持析构函数 => 单条调用或赋值语句
- 属性表达式 get => 变量; 或 set => 变量=value ?? "默认值";
- 增强的null异常处理(支持 ?? throw new Exception(message);)
- 增强的异步返回类型(ValueTask<T>,需要扩展包支持,Install-Package System.Threading.Tasks.Extensions)
- 增强的字面值写法(int a = 123_456; int b = 0xAB_CD_EF; 与不带下划线的值相同)
- 解构函数Deconstruct,类似元组的调用方法
C# 6.0 新特性
- 增强的属性表达式
- 只读属性 public int a => 100;
- 属性默认值 public int c { get; set; } = 100;
- 只读属性和readonly字段支持在构造函数中赋值
- 函数表达式,public int add(int a, int b) => a + b;
- NULL检查运算符
- int? age = list?.FirstOrDefault()?.Age; 非空才进行后续操作(age必须是可空类型)
- int? age = users?[0].Age; 非空才进行索引操作(age必须是可空类型)
- nameof表达式,获取变量、函数、类的名称
- 增强的异常处理
- catch和finally语句块中支持await
- catch支持条件表达式,catch (Exception e) if (e.XXX == xxx)
- 字符串嵌入值,var user = $"{Name} {Age}"
- 支持using静态类,然后直接使用类中的方法
- 带索引的对象初始化器:new Dictionary<string, int> { ["a"] = 1, ["b"] = 1, };
- 支持无参数的结构体构造函数(注意,只有通过new得到的结构体才会调用构造函数)
PS. 参考了很多园子里大神的文章,感谢分享!
C# 6.0/7.0 的新特性的更多相关文章
- Jdk5.0中出现的新特性
掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...
- C#6.0 中的那些新特性
C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...
- Android 5.0(棒棒糖))十大新特性
Android 5.0(棒棒糖))十大新特性 1. 全新Material Design设计风格 Android Lollipop全新的设计语言是受到了多种因素影响,是一种大胆的平面化创新.换句话说,谷 ...
- Android 7.0(牛轧糖)新特性
Android 7.0(牛轧糖)新特性 谷歌正式在I/O大会现场详细介绍了有关Android 7.0的大量信息.目前,我们已经知道,新一代Android操作系统将支持无缝升级,能够通过Vulkan A ...
- Angular4.0.0正式发布,附新特性及升级指南
本文首发地址:Angular4.0.0正式发布,附新特性及升级指南 作者|孙薇 编辑|尾尾 经历了6个RC版本之后,Angular项目组终于发布了新版,即正式版 Angular 4.0.0.新版的 A ...
- (数据科学学习手札129)geopandas 0.10版本重要新特性一览
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...
- (数据科学学习手札139)geopandas 0.11版本重要新特性一览
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...
- VS2015 C#6.0 中的那些新特性(转载)
自动属性初始化 (Initializers for auto-properties) 以前我们是这么写的 为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写 只读属性的初始化(Getter-o ...
- php7.0 和 php7.1新特性
PHP7.1 新特性 1.可为空(Nullable)类型 类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null .可以通过在类型前面加上一个问号来使之成为 ...
- Mysql8.0.11简介,新特性
MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...
随机推荐
- 解决频繁自动弹出“QQ拼音升级程序”,可使用旧版QQ输入法
QQ输入法(2017年9月6日版本)下载地址: http://dlc2.pconline.com.cn/filedown_90891_8506339/BZXMP3fp/QQPinyin_Setup_5 ...
- 安卓NDK流程
定义wrap类,声明native函数,加载库 package com.ndk.hello; public class Classs { public native String say_hello() ...
- 使用nodejs创建加入用户验证的websocket服务
使用nodejs创建websocket服务是非常简单的(”ws”模块等),网上教程也很多.websocket服务默认没有连接验证,再加上它支持跨域连接,这样就存在“盗连”和并发攻击的风险. nodej ...
- AFNetworking 初探
AFNetworking 初探 繼ASIHTTPRequest發佈不再維護的訊息之後,如果我們不使用CDN(雲端伺服器),AFNetworking 會是一套不錯的選擇.下載網址:https://git ...
- mysql5.6之前需要账号的安全加固
mysql5.6之前需要账号的安全加固 从5.7开始就不需要了. delete from mysql.user where user!='root' or host='localhost'; flus ...
- Nginx+Tomcat+memcached高可用会话保持
Nginx+Tomcat+memcached高可用会话保持 文章来源dyc2005 一.概述 之前文章已经描述了企业高可用负载相关的架构及实现,其中常用的nginx或haproxy,LVS结合ke ...
- 剑指offer28 字符串的排列
1.全局变量可以在最后去定义并初始化,不一定非要在开头 2.此题有一种特殊情况需要考虑,比如字符串是“aa”,那输出应该是“aa”,而不是“aa,aa”,即相同的不输出.实现这个处理用了c++中的容器 ...
- Matlab 绘图实例
概要 每次用 Matlab 绘图都要搜一堆资料设置一些参数,本次将绘图中的一些参数设置实例展示在这里,以备不时之需.暂包括折线图,面积图. 折线图实例 下图是效果图: 图 1:折线图效果图 ...
- MAC下secureCRT无法保存密码的解决方法
在mac下新安装了secureCRT,取代系统自带的终端工具,主要是为了方便链接服务器.mac下面的secureCRT默认保存不上密码, 我们选择了保存密码后,下次登录还是提示密码错误,需要重新认证输 ...
- C#使用ref和out传递数组
C#使用ref和out传递数组 一.使用ref参数传递数组 数组类型的ref参数必须由调用方明确赋值.因此,接受方不需要明确赋值.接受方数组类型的ref参数能够修改调用方数组类型的结果.可以将接受方的 ...