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

C#提议引入目标类型new表达式特性,该特性允许在能从上下文推断出类型的情况下省略类型声明。这将简化代码并提高编写效率,尤其是在处理临时参数时。本文探讨了该特性的适用场景及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

\n

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

\n
Dictionary\u0026lt;string, List\u0026lt;int\u0026gt;\u0026gt; field = new Dictionary\u0026lt;string, List\u0026lt;int\u0026gt;\u0026gt;();\nDictionary\u0026lt;string, List\u0026lt;int\u0026gt;\u0026gt; field = new();\n
\n

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

\n
XmlReader.Create(reader, new XmlReaderSettings() { IgnoreWhitespace = true });\nXmlReader.Create(reader, new() { IgnoreWhitespace = true });\n
\n

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

\n

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

\n
private readonly static object s_syncObj = new();\n
\n

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

\n
  • \n
  • \n

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

    \n\n
  • \n

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

    \n\n
  • \n

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

    \n\n
  • \n

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

    \n\n
\n

状态

\n

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

\n

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

\n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值