内容简介:对于C# 8,有吸引了大多数注意力的重大特性,如默认接口方法和可空引用,也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。从第一个版本开始,C#就支持把等号和另外一种运算符合在一起的语法。这几乎包括除短路布尔运算符&&和||之外的所有的二元操作符(如+、-、&等)。“逐字字符串以@"开头。内插字符串使用$"。但是,如果你想要一个既逐字又内插的字符串呢?是用@$"还是$@"?目前,其中一个有效,另一个会报编译器错误,但是,人们通常很难记住哪个是哪个。
对于C# 8,有吸引了大多数注意力的重大特性,如默认接口方法和可空引用,也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。
新的赋值运算符:&&=和||=
从第一个版本开始,C#就支持把等号和另外一种运算符合在一起的语法。这几乎包括除短路布尔运算符&&和||之外的所有的二元操作符(如+、-、&等)。“ 赋值运算符&&=和||= ”提案是对这个列表的补充。
逐字内插字符串
逐字字符串以@"开头。内插字符串使用$"。但是,如果你想要一个既逐字又内插的字符串呢?是用@$"还是$@"?目前,其中一个有效,另一个会报编译器错误,但是,人们通常很难记住哪个是哪个。
在一个名为“ 逐字插入字符串 ”的中肯提案中,该语法将得到扩展,接受@$"。对它的解释将和逐字插入字符串($@")完全相同,因此,你再也不用担心弄反了。
关于这项修改,存在一些小争议,因为有人认为这没有必要或者会导致不一致。
允许using语句结构匹配IDisposable
接口与C#编译器之间存在着奇怪的关系。经常,你不必为了使用一个语言特性而真正实现一个具体的抽象接口;你只需在类似抽象接口的类上创建一个公开的API。
典型的例子是“foreach”和IEnumerable。如果类有一个方法GetEnumerator,返回一个包含Current属性和MoveNext方法的对象,那么你就可以使用foreach。实际的返回类型不重要,这使得 List<T>这样的类似可以实现更快速的枚举器 。这通常称为“结构匹配(structural matching)”。
在这个提案中, using语句也将支持结构匹配 。这乍看之下没什么用,因为你不会希望看到一个可释放类没有实现IDisposable。不过,有一种名为 ref struct 的新类型。它们不能实现接口,因此,如果没有这项提案,你在使用它们时就无法使用using语句。
和foreach与using共用的扩展方法
这个提案是前述提案的补充,是为了能够把GetEnumerator或Dispose作为扩展方法添加,并且可以分别和“foreach”或“using”共用。再次,我们谈论的这项特性仅用于非常特殊的情况。例如,你可以从第三方库(这可能是调用Marshal.ReleaseComObject的好地方)向一个COM对象添加一个Dispose扩展方法。
这还不是一个正式的提案,可能会合并到前面提到的“using”语句修改中。
“using”语句隐式作用域
目前,“using”语句后面只能是一个显式作用域(即一对花括号)或者另一个“using”语句。如果这个 提案 通过,你就可以编写下面这样的代码:
using var a = new MyDisposable(); using var b = new MyDisposable(); using var c = new MyDisposable();
上述每个变量都会在当前作用域结束时以相反的顺序自动释放。从功能上说,这和下面的代码等价,但更简洁,也不会引入新作用域。
using (var a = new MyDisposable()) using (var b = new MyDisposable()) using (var c = new MyDisposable()) { // 一些代码 }
当需要多个可释放对象而又不同时创建时,这项修改会特别有用。你甚至可以在表达式中间创建可释放对象,而且可以确信,它将在当前作用域结束时释放。
var results = myExcelReader.ReadResults(using new MyExcelSheet(excelFilePath));
对于这项提案,其中一个批评是,它与某些语句如“goto”不兼容。
查看英文原文: C# 8 Small Features
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 『互联网架构』软件架构-redis特性和集群特性(中)(49)
- 『互联网架构』软件架构-redis特性和集群特性(上)(48)
- 『互联网架构』软件架构-redis特性和集群特性(下)(50)
- JDK 14 功能特性
- C# 特性(Attribute)
- python—高级特性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。