VS2017中C#7新特性详解:out变量与元组使用指南
cnblogs.com/ants/p/6382264.html

VS2017也有几个版本的rc.我想跟进看看c#7中添加了哪些内容。我搜索了c#7,发现了很多文章。不幸的是,许多功能 IDE 根本不允许编译。 。 。所以今天我们主要列出已经确认的c#7功能(一般来说,rc之后不会添加新功能,其他预览功能可能要等c#8了哈哈)
1.输出变量
在 c#7 之前我们必须这样做
在c#7中我们可以这样做
当然你也可以使用“var”
这是一个小更新。其实这个问题已经存在很长时间了,应该很容易解决。不知道为什么c#7才引入。不管怎样,以后可以省一行代码。
2. 元组
需要安装nuget包:System.ValueTuple
就我个人而言,我认为这是给 C#7 带来的最酷、最有用的改变。让我们从头看起。
你还记得“元组”吗?不记得了?好吧,让我们看看它的定义。
让我们看看如何使用它
你想哭吗? 。说实话,自从我开始编程以来,我几乎没有使用过Tuple。 “ItemN”对于开发者来说非常不友好。我宁愿创建一个结构或类来定义属性设备。
我们在c#7中试试(这算返回值太多了)?
如果你觉得return(1,xxx)不够准确,那么你可以
如果你不想要result.xxx,那么你也可以“解构”
您仍然可以这样做(不推荐)
您还可以在方法中临时创建一个元组
通过这些功能我们还可以不断地声明和赋值变量
解构类(不推荐)
3. 模式匹配
本节主要丰富了“switch”,有点类似于c#6的异常过滤器。
在以前的版本中,switch 只能区分常量,但现在它可以有更多的条件。
在c#7中我们可以这样做
4. 引用局部变量和返回值
这个个人很少用,所以简单写了一个对比代码。
5. 本地功能
这是一个非常实用的功能,丰富了动作和功能。让我们看一个例子:
c#7之前的递归调用
在 c#7 中
6. 表达式可以用于更多成员(More expression-bodied Members)
7. 表达式抛出异常(Throw statements)
8. 异步返回值类型(Generalized async return types)
需要安装nuget包:System.Threading.Tasks.Extensions
严格来说,这并不是语法的新功能,而是添加了一些类。
以前,如果我们想使用“async”和“await”,就必须使用Task作为返回值(void特殊情况忽略),但是Task是引用类型(类),会造成浪费(内存和gc) )在非常简单的任务中。 )
在c#7中,微软添加了一个nuget包,并添加了一个新类型“ValueTask”来解决这个问题。它是值类型。
9. 数字文字语法改进
妈妈再也不怕我多加个0了~
写在最后
我写这篇文章的时候是相当头疼的,因为我一时想不出这个特性的适用场景,而且还需要实践一下才能体会到新语法是否有用。
值得注意的是,由于一些新的语法与nuget包相关,所以下次我们会仔细研究一下,这主要归功于roslyn的贡献。
参考: