C# 8.x 先睹为快

2019 年 7 月 10 日 InfoQ

作者丨Jonathan Allen

译者丨刘雅梦

尽管 C# 8.0 还需要几个月的时间才能发布,但是 C# 8.x 的特性计划已经开始了。该计划中的特性有一些是新提出的,而另外一些则是之前在 C# 8 中考虑过的。和往常一样,这个特性列表仍可能会发生变化。

如之前的一个报告所讨论的那样,Caller Expression Attribute 特性允许函数捕获用于生成其参数的表达式。它主要用于断言和自动化测试。

new 关键字类型推断(正式名称为目标类型“new”表达式),能在通过上下文可以确定类型名称的情况下减少样板代码。

虽然目前对于 Defer 声明 的反对率高达到 3:1,但是在 8.x 版本,Defer 声明仍然在考虑的特性列表中。

NULL 增强公共类型

这实际上是两个需求(#33 和 #881),它使我们在处理可为空值类型和三元运算符时不再需要添加显式强制转换了。在 NULL 增强公共类型的建议下,将允许如下的使用场景。

int a;int? x1 = condition ? a : null;

int? b;double c;double? x2 = condition ? b : c;

在推断数组类型或 lambda 表达式的返回类型时,也支持这种改进。

声明表达式

基于 C 语言的一个特性是赋值是表达式,而不仅仅是语句。这允许了诸如 a=b=c=0 的快捷赋值方式,但也允许了诸如 if(a=false)的错误。因此,许多设计指南都禁止在另一个语句中修改变量。

C# 一直在相反的方向上发展,它能够在诸如输出参数等新的地方定义变量,并作为模式匹配的一部分。使用声明表达式,我们几乎可以在任何可以执行赋值的地方声明变量。

以前你需要写如下的代码,

char ch;while ((ch = GetNextChar()) == 'a' || ch == 'b' || ch == 'c')

现在它可以缩短成如下代码:

while ((char ch = GetNextChar()) == 'a' || ch == 'b' || ch == 'c')

下面是你可能会写的另一个示例:

var sum = (var p = GetPoint(); p.X + p.Y);

在解构时混合声明和变量是一种相关特性的能力。它首次是在 C# 7.1 中提出的,它将允许在新定义某些(而不是全部)变量时进行多重赋值。

(x, var y) = e;
本地函数改进

本地函数的一个限制是它们不能应用属性(这只是 C# 的一个限制;CLR 允许这样做)。在 C# 8 中,它可能引起问题的原因是,可能需要诸如 NotNullWhenTrue 之类的属性来为可空性检查获取正确的语义。

再比如,使用本地函数的属性可以更方便地配置 ASP.NET 的路由。

原文链接:

https://www.infoq.com/news/2019/07/CSharp-8x/



点个在看少个 bug 👇

登录查看更多
1

相关内容

C# 是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C# 由 C 语言和 C++ 派生而来,继承了其强大的性能,同时又以 .NET 框架类库作为基础,拥有类似 Visual Basic 的快速开发能力。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
一个牛逼的 Python 调试工具
机器学习算法与Python学习
15+阅读 · 2019年4月30日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
Python3.8新特性概览
Python程序员
4+阅读 · 2018年12月8日
教程 | PyTorch经验指南:技巧与陷阱
机器之心
15+阅读 · 2018年7月30日
开发、调试计算机视觉代码有哪些技巧?
AI研习社
3+阅读 · 2018年7月9日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Arxiv
5+阅读 · 2019年10月11日
Arxiv
12+阅读 · 2018年1月28日
Arxiv
3+阅读 · 2017年12月23日
VIP会员
相关资讯
一个牛逼的 Python 调试工具
机器学习算法与Python学习
15+阅读 · 2019年4月30日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
Python3.8新特性概览
Python程序员
4+阅读 · 2018年12月8日
教程 | PyTorch经验指南:技巧与陷阱
机器之心
15+阅读 · 2018年7月30日
开发、调试计算机视觉代码有哪些技巧?
AI研习社
3+阅读 · 2018年7月9日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Top
微信扫码咨询专知VIP会员