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
随机推荐
- 7.1 基础知识Android消息处理机制
1. Android消息处理机制: Handler, MessageQueue, Looper, Thread 线程概念 : 一个应用程序运行时它的主体被称为进程, 一个进程内部可以有多个线程, 线程 ...
- 【u252】泽泽在巴西
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 泽泽帮助了英国某街道尽量减少酸雨的伤害,街道办主任非常感激他,就把他领到一扇门前,告诉他这扇门能通往好 ...
- windows+python3+opencv3.4安装
1.安装anaconda. 2.pip install opencv-python 网上很多关于python opencv安装说明,步骤极其繁琐,其实按照本说明只需两步就可安装完成.
- Ubuntu12.04.4 Vmware 虚拟机安装总结
Ubuntu12.04.4 Vmware 虚拟机安装总结 背景:近期准备入手一块树莓派(RaspberryPI),准备一下开发环境,可惜机器硬盘小,又舍不得格调Win7,所以仅仅好装虚拟机了.考虑到对 ...
- Python爬虫之路——简单的网页抓图
转载自我自己的博客:http://www.mylonly.com/archives/1401.html 用Python的urllib2库和HTMLParser库写了一个简单的抓图脚本.主要抓的是htt ...
- google analytics是什么(免费的网站流量分析服务:比如分析有多少个人来了你的网站,告诉你怎么样才能在网站上面实现最大收益。)
google analytics是什么(免费的网站流量分析服务:比如分析有多少个人来了你的网站,告诉你怎么样才能在网站上面实现最大收益.) 一.总结 免费的网站流量分析服务:比如分析有多少个人来了你的 ...
- SpringBoot学习:获取yml和properties配置文件的内容(转)
项目下载地址:http://download.csdn.net/detail/aqsunkai/9805821 (一)yml配置文件: pom.xml加入依赖: <!-- 支持 @Configu ...
- Selector API用法
java.nio.channels 类 Selector java.lang.Object java.nio.channels.Selector 直接已知子类: AbstractSelector pu ...
- php实现 字符串加密(分类分布分工,化不可能为可能)
php实现 字符串加密(分类分布分工,化不可能为可能) 一.总结 一句话总结:谋而后动,加先伪代码,在带函数逻辑,在函数的方式可以极大的避免错误和降低难度.不然这个题目乎出现各种乱七八糟的错误. 1 ...
- [Javascript] Create scrollable DOM elements with Greensock
In this lesson, we will look at Greensock's Draggable API. We will implement a scrollable <div> ...