C#7
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
最新文章
- 第19章 集合框架(3)-Map接口
- python基础——使用@property
- Innodb之拷贝InnoDB表从一服务器到另一台服务器
- linux注销、关机、重启
- gcc, numpy, rabbitmq等安装升级总结
- Enum(枚举)示例
- js spin 加载动画(loading)
- [Angular 2] ROUTING IN ANGULAR 2 REVISITED
- [置顶] API相关工作过往的总结之整体介绍
- 直接拿来用!Facebook移动开源项目大合集
- Unity3D ——强大的跨平台3D游戏开发工具(五)
- Ext JS 5初探(一)
- vivado place30-378
- .Net Core:Middleware中间件管道
- nginx根据cookie分流
- Excel根据字符串截取单元格部分内容
- Vue.Js初学踩坑
- How to deploy kotlin in androidstudio?
- js 冒泡事件阻止 父层事件影响子层
- python之函数用法isupper()
热门文章
- php实现运气模型(命运随机,克服困难)
- Gamma correction 伽马校准及 matlab 实现
- ios sqlite数据库操作
- Java 开发规约插件
- percona-toolkit源码编译安装
- [AngularFire2] Update multi collections at the same time with FirebaseRef
- [AngularJS] Using an AngularJS directive to hide the keyboard on submit
- 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏
- Android面试准备 第二天 第五例 数据存储
- 【读书笔记与思考】Andrew 机器学习课程笔记