C# 8:new关键字将能够推断类型

在许多情况下,在给定的位置只能是确定的类型。但是C#却要求显示的列出类型名称。如果Target-typed new表达式的建议被采纳,像这样的模板代码将不再需要。

表面上看,这个特征跟var关键字相反。但是它不是从表达式中推断变量类型,而是从变量中推断表达式的类型。下面分别是使用当前语法及建议语法的例子。

//当前语法
Dictionary<string, List<int>> field = new Dictionary<string, List<int>>();
//建议语法
Dictionary<string, List<int>> field = new();

像你看到的一样,当C#能够根据上下文推断出类型时,就不需要再详细制定类型了。对于局部变量,它并不是很有趣。它更能在临时参数的场景下发挥作用。

//当前写法
XmlReader.Create(reader, new XmlReaderSettings() { IgnoreWhitespace = true });
//建议写法
XmlReader.Create(reader, new() { IgnoreWhitespace = true });

再上面的代码中,类XmlReaderSettings并不是很有趣。它只不过是为了将选项值赋值给XmlReader。甚至有人认为XmlReaderSettings的出现能让我们忽视真正重要的信息。

在var关键字并不适用的场景下,比如字段和属性,这个特征比较有用。

private readonly static object s_syncObj = new();

根据这项建议,如下四种场景不适合使用。

  • 枚举: 并不是所有的枚举类型都包含0,因此应该明确列出每一个枚举成员。
  • 接口:这是一个小众的特征,最好明确的提出类型。
  • 数组: 数组的语法要求提供数组长度。
  • 结构体的默认构造函数: 这排除了所有基本类型和大多数值类型。如果您想使用此类类型的默认值,那么可以编写default。

目前,调用者表达式属性在c# 8路线图中以状态“Prototype”列出。特性测试计划在GitHub上可用。

本文翻译自:C# 8: Type Inference for the new Keyword

 

转载于:https://www.cnblogs.com/SuperChan/p/10269394.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值