内容简介:C# 7.1先睹为快(第一部分)
自2003年以来,Microsoft首次考虑对C#使用带小数点后位数的版本。当前暂定下一个版本是C# 7.1,其中有望包括:异步Main函数(Async Main)、默认表达式(Default Expression)、推导元组名(Infer Tuple Names)和使用泛型的模式匹配(Pattern-matching with Generics)等。
异步Main函数
最让测试异步代码的开发人员沮丧的,无疑是控制台应用当前不支持异步入口点(EntryPoint)。虽然变通方法是编写多行样板代码,但是这样的模式依赖于对方法的非正常使用,难于理解。例如:
ublic static void Main() { MainAsync().GetAwaiter().GetResult(); } private static async Task MainAsync() { ... // 程序主代码。 }
为解决这个问题,在“ 异步Main函数建议 ”中,添加了如下四个新的函数签名,罗列了可能的入口点。
static Task Main() static TaskMain() static Task Main(string[]) static Task Main(string[])
如果代码中不存在另一个非异步Main函数,那么只要给出一个上述的入口点函数,编译器就会生成所需的样板代码。唯一的限制是需要向后兼容。
Microsoft曾考虑允许“async void Main()”,但是这种做法会使编译器更复杂,并且Microsoft总体上并不鼓励在事件处理器之外使用“async void”。
默认值(即Nothing)
VB没有表示“null”的关键字,这是C#和VB间的一个微妙的差别。但是VB有一个关键字“Nothing”。在 语言技术规范 中,对该关键字给出了如下说明:
Nothing是一个特殊的常值。它没有类型,可转换为类型系统中的任意类型,也包括类型参数。在转换为某个特定类型后,它等价于该类型的默认值。
C#当前使用“default(T)”模式实现同一效果,但略为繁琐,尤其是类的名字很长时。C# 7.1中将提供一个“ 默认常值 ”(Default Literal),其描述为:
这一类型的表达式可通过常值转换为默认值或null值,隐式地转换为any类型。
该类型向默认常值的推理与向null常值推理的工作机制一样,除非允许any类型(不只是引用类型)。
在可以使用null的地方,通常也可以使用默认常值。这一做法被看成是C#建议中的一个倒退,可能因为人们通常会对两个非常类似的方法完成同一件事大皱眉头。在设计会议纪要中,就有人提出疑问:
我们是否正在挑起类型之争?
一个使用默认常值的例子如下:
ImmutableArrayx = default; return default; void Method(ImmutableArray arrayOpt = default) var x = new[] { default, ImmutableArray.Create(y) }; const int x = default; if (x == default) if (x is default) y = default as RefType //编译器告警:总是null。 int i = default
下面例子给出的是对默认常值的非法使用:
const int? y = default; if (default == default) if (default is T) var i = default throw default
后者无疑是一个C#设计上的奇特构件。在设计会议纪要中,给出了如下说法:
在C#中,允许开发人员抛出null。这会引发一个运行时错误,进而导致抛出一个NullReferenceException异常。因此,抛出NullReferenceException并非正大光明的,而是一种丑陋的模式。
完全没有理由允许抛出默认值。我们并不认为用户会感觉这是可行的,或是了解它的工作机制。
Microsoft并未引入默认常值,而是考虑通过扩展“null”实现同一效果。因为在VB中“nothing”和“null”是两个不同的关键词,所以在VB中可以这样做。即使不使用关键字,VB中也具有null的概念。因此,开发人员可以看到“NothingReferenceException”这样的异常。
在C#中,开发人员可能常会有这样的一个疑问:“null是否表示的是实际的空值,或是表示了可能为空值也可能不为空值的默认值?”我们认为,这是一个令人非常困惑的问题。
在本文的第二部分中,我们将介绍元组和模式匹配。
查看英文原文: An Early Look at C# 7.1: Part 1
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
马云现象的经济学分析:互联网经济的八个关键命题
胡晓鹏 / 上海社会科学院出版社 / 2016-11-1 / CNY 68.00
互联网经济的产生、发展与扩张,在冲击传统经济理论观点的同时,也彰显了自身理论体系的独特内核,并与那种立足于工业经济时代的经典理论发生显著分野。今天看来,“马云”们的成功是中国经济长期“重制造、轻服务,重产能、轻消费,重国有、轻民营”发展逻辑的结果。但互联网经济的发展却不应仅仅止步于商业技巧的翻新,还需要在理论上进行一番审慎的思考。对此,我们不禁要问:互联网经济驱动交易发生的机理是什么?用户基数和诚......一起来看看 《马云现象的经济学分析:互联网经济的八个关键命题》 这本书的介绍吧!