learun开发社区 - 力软.net/java快速开发平台官方论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1827|回复: 3

C#7的9个新语法

[复制链接]

1

主题

3

帖子

23

积分

新手上路

Rank: 1

积分
23
发表于 2019-3-1 13:22:53 | 显示全部楼层 |阅读模式
一、out变量
在c#7之前我们得这样


在c#7中我们可以这样


当然你还可以使用“var”


这算一个小更新,其实这个问题存在很久了,应该也很好解决,不知为何到c#7才开始引入,不管如何以后可以少些一行代码了。

二、元组(Tuples)
需要安装nuget包:System.ValueTuple

个人觉得这是c#7中带来最cool也是最有用的变化了,我们从头来看。

大家还记得“Tuple”吗?不记得?ok我们看看它的定义。



在来看看使用



想不想哭。。讲真,自我编程以来几乎没有用过Tuple,“ItemN”对开发者非常的不友好,我宁愿创建一个struct或class来定义属性器。

我们在c#7中试试(这也算多返回值了)?



如果你觉得return (1,xxx)不够准确,那么你可以


如果你不想result.xxx,那么你还可以“解构”


你还可以这样(不推荐)



还可以在方法内临时创建一个元组


通过这些特性我们还可以连续声明并赋值变量了


解构类(不推荐)


三、模式匹配(Pattern matching)
这一块主要是对“switch”进行了丰富,有点类似c#6的异常过滤器
在之前的版本中switch只能case常量,而现在可以拥有更多的条件了
在c#7中我们可以这样


四、本地引用和返回(Ref locals and returns)
这个个人比较少用,简单写个对比代码


五、本地函数(Local functions)
这个是个很实用的功能,算是action、和func的丰富,我们来看一个例子:
递归调用在c#7之前


在c#7中


六、表达式可用于更多成员(More expression-bodied members)

七、表达式抛出异常(Throw expressions)

八、值类型的异步返回(Generalized async return types)
需要安装nuget包:System.Threading.Tasks.Extensions

严格意义上这个不算一个语法的新特性而是增加了一些类。

在之前我们想用“async”、“await”就必须使用Task作为返回值(void特殊情况忽略),但Task是一个引用类型(class),这样在非常简单的任务中会造成浪费(内存和gc)

在c#7中微软添加了一个nuget包,增加了一个新的类型“ValueTask”用来解决这个问题。它是值类型的。


九、数值语法改进(Numeric literal syntax improvements)
妈妈再也不怕我多加个0啦~


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

3

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 2019-3-24 11:11:56 | 显示全部楼层
非常好,谢谢分析。
回复

使用道具 举报

0

主题

8

帖子

168

积分

注册会员

Rank: 2

积分
168
发表于 2019-3-27 11:37:50 | 显示全部楼层
谢谢
回复

使用道具 举报

0

主题

5

帖子

157

积分

注册会员

Rank: 2

积分
157
发表于 2019-3-27 15:15:20 | 显示全部楼层
太有帮助了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|learun开发社区 - 力软.net/java快速开发平台官方论坛 ( 沪ICP备14034717号 )

GMT+8, 2021-1-26 16:49 , Processed in 0.220169 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表