不用觉得奇怪,这个语法主要是受Python启发,主要的区别是C#不能使用-1表示数组末尾索引,因为那在.NET数组中已经有一个意思了。因此,我们使用^1语法代替。
GitHub上提供了索引和范围的预览。
IAsyncDisposable
顾名思义,该接口允许对象暴露一个DisposeAsync方法。与此对应的是新语法“using async”,它和普通的using块一样,但增加了等待dispose调用的功能。
异步枚举
和IEnumerable类似,IAsyncEnumerable让你可以枚举一个长度未知的有限列表。不过,配备的枚举器看上去有轻微的差别。它暴露了两个方法:
Task<bool> WaitForNextAsync(); T TryGetNext(out bool success);该接口有一个有趣的特性,就是允许你批量读取数据。你针对批次中的每一个数据项调用TryGetNext方法。当返回success=false时,你可以调用WaitForNextAsync获取一个新的批次。
这之所以重要,是因为大多数进入应用程序的数据要么是按批次,要么是从网络流入。当你调用TryGetNext时,数据大多数时候都已经是可用的。分配一个Task对象有点浪费,除非你用完了输入缓冲区中的数据,并且仍然希望能够异步等待更多数据。
在理想情况下,你不会经常直接使用这些接口。取而代之,微软希望你使用异步迭代器语法“foreach await”,我们去年预览过。它会根据需要处理同步或异步方法的调用。
默认接口方法
这个灵感来自Java、颇具争议的特性仍然被考虑加入C# 8中。简单来说,它让你可以添加新方法及其实现,达到接口演化的目的。这样,新方法不会破坏向后兼容性。
记录
记录是一种快速创建不可变类的语法。我们第一次看到这个提案是在2014年。当前的例子如下:
class Person(string FirstName, string LastName);从根本上说,它完全是一个由构造函数签名定义的类。对于一个不可变类,你想要的所有属性和方法都是自动生成的。
查看英文原文:Build 2018: The Future of C#