阅读目录

  • out变量
  • 元组(Tuples)
  • 模式匹配(Pattern matching)
  • 本地引用和返回(Ref locals and returns)
  • 本地函数(Local functions)
  • 表达式可用于更多成员(More expression-bodied members)
  • 表达式抛出异常(Throw expressions)
  • 值类型的异步返回(Generalized async return types)
  • 数值语法改进(Numeric literal syntax improvements)
  • 写在最后

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

C#7的新语法的更多相关文章

  1. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  2. qt5中信号和槽的新语法

    qt5中的连接 有下列几种方式可以连接到信号上 旧语法 qt5将继续支持旧的语法去连接,在QObject对象上定义信号和槽函数,及任何继承QObjec的对象(包含QWidget). connect(s ...

  3. Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法

    Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便.可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake ...

  4. .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

    开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...

  5. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

    开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...

  6. .NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式

    开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式.为了方便码农们,. ...

  7. .NET中那些所谓的新语法之四:标准查询运算符与LINQ

    开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50 ...

  8. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  9. 总结常见的ES6新语法特性

    前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...

  10. 队列与DelphiXe新语法

    好久没写代码了,更久没上博客园的博客了,无聊写几行试一下新语法. 1 unit Main; interface uses Winapi.Windows, Winapi.Messages, System ...

随机推荐

  1. Linux 内存优化

    1.清理前内存使用情况 free -m2.开始清理   echo 1 > /proc/sys/vm/drop_caches 3.清理后内存使用情况 free -m 4.完成! 查看内存条数命令: ...

  2. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!   “看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一 ...

  3. windows service宿主web api使用"依赖注入"和“控制反转”的技术实践

    前言 自从几年前抛弃wcf,使用web api 来做服务器端开发之后,就不再迷惑了.但是因为本来从事传统行业管理软件开发,一般都以分布式应用开发为主.纯BS还是比较少,于是比较喜欢用windows s ...

  4. 关于hosts文件的原理与制作

    由于需要整理的关于hosts的文件 关于hosts文件的原理与制作1.什么是hosts文件hosts文件是一个没有扩展名的系统文件,hosts文件用于存储计算机网络中节点信息的文件,它是可以将主机名映 ...

  5. solr 学习之简介及安装

    一.solr简介 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索 ...

  6. 用DapperExtensions和反射来实现一个通用搜索

    前言 搜索功能是一个很常用的功能,当然这个搜索不是指全文检索,是指网站的后台管理系统或ERP系统列表的搜索功能.常见做法一般就是在搜索栏上加上几个常用字段来搜索.代码可能一般这样实现 StringBu ...

  7. C++ 11 学习1:类型自动推导 auto和decltype

    Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...

  8. Bootstrap学习-环境安装

    1.<meta http-equiv="X-UA-Compatible" content="IE=edge"> 让IE运行最新的渲染模式. 2.&l ...

  9. 对spring web启动时IOC源码研究

    研究IOC首先创建一个简单的web项目,在web.xml中我们都会加上这么一句 <context-param> <param-name>contextConfigLocatio ...

  10. 很污的机器学习:从xhamster网站找到喜欢的片子

    前言 最近迷上了看黄片(大雾).每次总是去搜索想看的片子,什么asian porn anal pussy 什么的我都不知道. 搜索着搜索着我手也累了,而且我喜欢的片子也是有一定的特征的,我不想把所有的 ...