博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 8的新提案:new关键字类型推断
阅读量:6495 次
发布时间:2019-06-24

本文共 967 字,大约阅读时间需要 3 分钟。

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

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

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

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

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

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

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

private readonly static object s_syncObj = new();

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

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

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

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

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

状态

目前,Caller Expression Attribute被列在中,状态为“Prototype”。可在GitHub上找到。

查看英文原文

转载地址:http://pmuyo.baihongyu.com/

你可能感兴趣的文章
Unity shader 官网文档全方位学习(二)
查看>>
pbrun
查看>>
Java后端工程师学习大纲
查看>>
ATL正则表达式库使用
查看>>
centos 7 confluence 安装
查看>>
04-dbutils源码之 各种ResultSetHandler实现类
查看>>
今天小小的继续一下
查看>>
github desktop 官方离线下载地址
查看>>
hive动态分区
查看>>
php 日志库获取调用方的代码文件地址和代码行数
查看>>
浏览器加载和渲染网页顺序
查看>>
微服务架构springcloud
查看>>
深入剖析Android系统试读样章
查看>>
测试用例出错重跑--flaky插件
查看>>
yaf的安装
查看>>
比较java与C++的不同
查看>>
Twitter Storm入门
查看>>
Windows 平台安装 MongoDB
查看>>
Linux Tar Split压缩解压缩分片压缩解压缩
查看>>
使用scikit-learn进行文本分类
查看>>