vs2017也rc好几个版本了,本想跟进看看c#7加入了什么内容,去搜索c#7,确实找到了不少文章,无奈很多特性ide根本不让编译啊。。。所以今天主要列出已经确定了的c#7特性(一般来说rc后也不会加入新的特性了,其它的预览特性我们可能等c#8哈哈)

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啦~

写在最后

写这个的时候还是蛮头疼的,因为一下子想不起来这个特性的适用场景,还是需要具体实践之后才能体会新的语法是否有用。

值得注意的是一些新的语法既然跟nuget包扯上了关系,这个我们下次再看细看,主要是roslyn的功劳。

参考资料:https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/csharp-7

原文地址:http://www.cnblogs.com/ants/p/6382264.html

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

最新文章

  1. 【对接】《前后端对接联调数据、调试接口过程乌龙大合集》
  2. 【80端口占用】win7下80端口被(Pid=4)占用的解决方法
  3. Fastsocket学习笔记之小结篇
  4. 用python画关系网络图-python networkx 包绘制复杂网络关系图的实现
  5. OpenCV透视变换应用于图像的实例(附完整源代码)
  6. iOS经典面试题之“runtime是如何实现weak变量的自动置nil”
  7. Apache Iceberg 快速入门
  8. android 不能接收组播数据,但能够发送组播数据
  9. 手把手带你手写SpringMVC,剑指优秀开源框架灵魂
  10. 【转】Linux zip解压/压缩并指定目录
  11. 纷杂的Spring-boot-starter: 3 数据访问与spring-boot-starter-jdbc
  12. Mac OS X 10.7.x Lion下添加离线词典
  13. 计算机科学数学背景,Emory的Mathematics and Computer Science「埃默里大学数学与计算机科学系」...
  14. MATLAB及Simulink----基本知识简介
  15. [4G5G专题-62]:架构 - 开放的网络自动化平台ONAP(Open Network Automation Platform)
  16. 天下难事必做于易 项目管理从简单做起(转)
  17. 如何设置excel回车换行
  18. ggplot2 去掉网格
  19. oracle环境配置全过程
  20. npm install下载包的时候报4048rename的错误

热门文章

  1. [转]order by 多个排序条件
  2. 试着翻译24小时自学SQL第四版
  3. Nginx负载均衡+转发策略
  4. redis缓存设计要点随谈
  5. C# 中如何一次 catch 多个异常?
  6. python才能做爬虫,No,C#也可以!
  7. 数据写入规则IBufferWriterT
  8. 2021年,Azure云遇到. NET5,注定开启高光时刻,微软的心,真大!
  9. ASP.NET Core 中基于工厂的中间件激活
  10. SQL Server in Docker - 还原数据库