C#7.0新特性和语法糖详解

伴随Visual Studio 2017的发布,C#7.0开始正式走上工做岗位。对于早已熟悉了旧版本C#的开发者来讲,C#7.0增长的很多新特性和语法糖能在很大程度上提高编程效率并下降出错率。本文将阐述C#7.0给出的9个改进。编程

 

一、元组——更优雅地返回多个值缓存

之因此将元组放在第一位,是由于它对C#编程体验的提高实在是太大了。元组这个概念在之前就已经被引入了C#,只不过它是经过一个名为Tuples的泛型类来实现的。使用这个泛型类虽然能够达到相似元组的效果,可是可读性实在是太差了,彻底就没有办法经过代码理解函数返回的究竟是什么,本应该是人类友好的参数名不得不变成Item一、Item2这样的抽象名称。也正是由于如此,通常的开发者更倾向于本身定义一个结构来用于返回多个值。异步

C#7.0引入的元组语法能让你更优雅地完成这一任务。你能够经过这种方式来表示一个函数的返回值类型:函数

 

在外部代码里,你能够这样来访问这个元组类型包含的多个值:性能

 

这可比先前C#版本里,用Item一、Item二、Item3来表示元组元素的方法直观多了,你也没必要写着写着就要回去查看本身的函数返回的顺序是怎样的了。3d

固然,若是你不想用类型推断和匿名元组类型的话,你还能这样解构一个元组:blog

使用元组的前提,是你引用了来自微软官方的System.ValueTuple包:作用域

 

二、局部函数——函数做用域新玩法开发

鉴于元组可能会炸脑,因此如今来点轻松的——局部函数,这是比较容易理解的一个新特性。简而言之,如今能够在函数里定义函数了,并且一般这个函数里的函数只能在外层函数里访问。直接上例子:同步

 

三、引用传递和引用返回——没必要担忧值类型的引用传递

熟悉C#的朋友确定知道,若是操做数是值类型,那么赋值运算符(等号)默认传递是这个类型的值;可是某些时候,咱们不但愿C#“自做聪明”地给咱们传递值,而但愿传递这个值类型的引用。在C#7.0中,微软从新利用了使用率不高的关键字ref,来代表咱们要传递的是一个引用而不是值。下面是实例:

这段程序的输出结果是3,而不是一般认为的0。缘由是中间的那句赋值,咱们告诉C#,咱们要传递的是引用,而不是值。因此后来对b的值做出修改,a的值同步改变了。

相似的,咱们能够用相同的方式来让一个函数返回一个值类型的引用而不是它的值:

 

四、模式——比较和匹配的新玩法

做为一门基于类型的语言,“封箱”和“拆箱”操做确定深刻人心。拆箱以前,咱们常常须要判断这个箱子究竟是什么类型的(is运算符)。之前版本的C#有个模板式的写法是:先用is运算符判断封箱类型,而后用as运算符拆箱。如今这个模板式的语法能够被缩写成这样了:

不只如此,C#7.0把这种东西称做“模式匹配”,这让你能用switch/case语句来批量判断封箱类型,并用when关键字来限定拆箱结果的条件。好比:

 

五、语法糖——out变量直接定义

之前在使用带有out参数的函数的时候,咱们必须先把要赋值的out参数定义好,在传递给函数。如今能够直接在传递的时候定义out参数了:

 

六、通用异步返回类型

一般来讲,异步方法返回类型必须是void,Task或者Task,这种方式的明显缺点,就是会在等待时但异步结果已经可用的状况下,对Task进行分配。C#7.0加入了ValueTask泛型类型,用来解决上述问题,这能显著提高部分异步程序的性能。简而言之,ValueTask会建立一个cache,用来缓存已经可用的值,而不至于每一次都等待一个相同的异步方法执行彻底相同的步骤。举例子的话篇幅会比较长,因此烦请你们本身查阅MSDN。

 

七、语法糖——λ表达式如今支持了更多的函数

在C#7.0中,构造函数、析构函数和属性访问器也可使用λ表达式了,好比:

 

八、语法糖——异常表达式

新增的运算符??(两个半角问号)用于在引用为null的时候抛出异常:

 

九、语法糖——数字里能够添加下划线加强可读性

如今C#7.0认为,1234_5678和12345678是一个数字了。也就是,数字中的下划线会被忽略。

总结:

C#7.0加入的新特性和语法糖能够很是有效地提高咱们编程的效率,也更有利于下降错误率。了解它们,对之后的工做将带来极大的帮助。

相关文章
相关标签/搜索