C# 8 的新提案:new 关键字类型推断

栏目: ASP.NET · 发布时间: 5年前

内容简介:在很多情况下,一个地方只允许出现一种可能的类型。C# 仍然要求你明确列出类型,但如果从表面上看,这个特性看起来与 var 关键字恰好相反。它不是根据表达式推断出变量类型,而是从变量推断出表达式的类型。以下是来自提案使用当前语法和建议语法的对比示例。

在很多情况下,一个地方只允许出现一种可能的类型。C# 仍然要求你明确列出类型,但如果 目标类型“new”表达式 提案被采用,那么就不再需要这些样板代码。

从表面上看,这个特性看起来与 var 关键字恰好相反。它不是根据表达式推断出变量类型,而是从变量推断出表达式的类型。以下是来自提案使用当前语法和建议语法的对比示例。

复制代码

Dictionary<string, List<int>> field =newDictionary<string, List<int>>();
Dictionary<string, List<int>> field =new();

正如你所看到的,当它能够从上下文中推断出类型时,就不需要指定类型。对于局部变量可能没有太大用处,但对于临时参数来说却很方便。

复制代码

XmlReader.Create(reader,newXmlReaderSettings(){ IgnoreWhitespace =true});
XmlReader.Create(reader,new(){ IgnoreWhitespace =true});

在上面的代码中,XmlReaderSettings 类只是用于持有传给 XmlReader 的选项值。我们甚至可以说 XmlReaderSettings 的类型名称对于它所持有的重要信息来说有点”反客为主“了。

这个特性另一个用武之地是不能使用 var 关键字的字段和属性。例如:

复制代码

privatereadonlystaticobjects_syncObj =new();

根据提案,这个特性不能被用在四个地方。

  • 枚举类型:并非所有枚举类型都包含常量零,因此应该使用显式枚举成员。

  • 接口类型:这是一个利基特性,最好要明确指定类型。

  • 数组类型:数组需要特殊的语法来表示长度。

  • 结构体默认构造函数:它排除了所有基本类型和大多数值类型。如果你想使用这个类型的默认值,可以自己写。

状态

目前,Caller Expression Attribute 被列在 C# 8 路线图 中,状态为“Prototype”。 特性测试计划 可在 GitHub 上找到。

查看英文原文: https://www.infoq.com/news/2019/01/c-sharp-targeted-type-new


以上所述就是小编给大家介绍的《C# 8 的新提案:new 关键字类型推断》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据化管理

数据化管理

黄成明 (@数据化管理) / 电子工业出版社 / 2014-7 / 59.90元

《数据化管理:洞悉零售及电子商务运营》讲述了两个年轻人在大公司销售、商品、电商、数据等部门工作的故事,通过大量案例深入浅出地讲解了数据意识和零售思维。作者将各种数据分析方法融入到具体的业务场景中,最终形成数据化管理模型,从而帮助企业提高运营管理能力。 《数据化管理:洞悉零售及电子商务运营》全部案例均基于Excel,每个人都能快速上手应用并落地。一起来看看 《数据化管理》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具