C#7

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

最新文章

  1. 第19章 集合框架(3)-Map接口
  2. python基础——使用@property
  3. Innodb之拷贝InnoDB表从一服务器到另一台服务器
  4. linux注销、关机、重启
  5. gcc, numpy, rabbitmq等安装升级总结
  6. Enum(枚举)示例
  7. js spin 加载动画(loading)
  8. [Angular 2] ROUTING IN ANGULAR 2 REVISITED
  9. [置顶] API相关工作过往的总结之整体介绍
  10. 直接拿来用!Facebook移动开源项目大合集
  11. Unity3D ——强大的跨平台3D游戏开发工具(五)
  12. Ext JS 5初探(一)
  13. vivado place30-378
  14. .Net Core:Middleware中间件管道
  15. nginx根据cookie分流
  16. Excel根据字符串截取单元格部分内容
  17. Vue.Js初学踩坑
  18. How to deploy kotlin in androidstudio?
  19. js 冒泡事件阻止 父层事件影响子层
  20. python之函数用法isupper()

热门文章

  1. php实现运气模型(命运随机,克服困难)
  2. Gamma correction 伽马校准及 matlab 实现
  3. ios sqlite数据库操作
  4. Java 开发规约插件
  5. percona-toolkit源码编译安装
  6. [AngularFire2] Update multi collections at the same time with FirebaseRef
  7. [AngularJS] Using an AngularJS directive to hide the keyboard on submit
  8. 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏
  9. Android面试准备 第二天 第五例 数据存储
  10. 【读书笔记与思考】Andrew 机器学习课程笔记