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

从表面上看,这个特性看起来与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被列在C# 8路线图中,状态为“Prototype”。特性测试计划可在GitHub上找到。

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

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

  1. JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)

    文章目录 1. 新语法结构 1.1 Java的REPL工具: jShell命令 1.2 异常处理之try-catch资源关闭 1.3 局部变量类型推断 1.4 instanceof的模式匹配 1.5 ...

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

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

  3. 根据变量推断变量类型_11位专家参与其中:本地变量类型推断是Java 10中最大的新功能

    根据变量推断变量类型 " Java 10不仅是对Java 9的简单稳定性和性能修复," 尽管Java 9是六个月前才发布的( 仅! ),这意味着对Java 10的期望可能不是很高, ...

  4. swift php 类型判断,Swift 5.1 新特性:透明类型关键字 some

    相信大家都对刚发布的 SwiftUI 印象深刻,在看示例代码的时候发现 View 前面有一个关键字  some.我开始以为是 SwiftUI 自带的属性,后来经网友提醒发现是 Swift 5.1 的新 ...

  5. Go 语言新提案:添加模糊测试支持

    Go 语言增加了支持模糊测试 (Fuzz Test) 的新提案. 据介绍,此项提案会为 Go 添加新的testing.F类型,在_test.go文件中支持FuzzFoo函数,并增加新的go命令行为.该 ...

  6. JDK10的新特性:本地变量类型var

    文章目录 简介 为什么我们需要var var使用在什么地方 var不能用在什么地方 其他var的特点 总结 简介 java以面向对象的特性显著于世并得到了蓬勃的发展.在语言的发展过程中,为了让java ...

  7. 现代C++新特性 强枚举类型(PC浏览效果更佳)

    文字版PDF文档链接:现代C++新特性(文字版)-C++文档类资源-CSDN下载 1. 枚举类型的弊 C++之父本贾尼·斯特劳斯特卢普曾经在他的The Design And Evolution Of ...

  8. 如何让Sublime Text编辑器支持新的ABAP关键字

    ABAP 7.40推出了许多新的关键字 - keyword,您的Sublime Text可能无法针对这些新关键字实现期望的语法高亮显示(syntax highlight)或者自动完成(auto com ...

  9. Java 8新特性探究(6):泛型的目标类型推断

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法 ...

最新文章

  1. 【转载】Python的运行原理(编译过程及执行原理)
  2. 世界半导体集成电路发展史(超细、超全)
  3. BGP建立邻居的详细过程
  4. shell中获取时间
  5. 使用SAP CRM中间件XIF(External Interface)一步步创建服务订单
  6. pandas输出到excel_python读写excel等数据文件方法汇总
  7. .Net DES加密解密(不带向量)
  8. android 监测bug上传到服务器,基于Android 错误信息捕获发送至服务器的详解
  9. XML fragments parsed from previous mappers already contains value for xxxxx
  10. Redis基础(十)——性能监控和监视器
  11. list, tuple, dict, set的用法总结
  12. Mysql的server_id_MySQL如何生成唯一的server-id
  13. Spark-SQL常用内置日期时间函数
  14. 算法导论2.3练习答案
  15. html表白代码大全可复制,浪漫的html表白特效网页制作源
  16. 电脑云便签怎么在桌面日历月视图上新增便签记录事情?
  17. layabox游戏开发经验分享1
  18. OpenCV —— 频率域滤波(傅里叶变换,低通和高通滤波,带通和带阻滤波,同态滤波)
  19. 手机怎么给视频去除水印
  20. 利用pyecharts绘制桑葚图

热门文章

  1. 富文本编辑器Quill(二)上传图片与视频
  2. 报错解决——ctypes.ArgumentError: argument 1:……….. : wrong type
  3. windows下pycharm连接vagrant的python环境
  4. 安装仪表盘控件Iocomp会遇到的几个常见问题
  5. 小程序添加动画效果--遇到的问题
  6. 提升效率的JQUERY(转)
  7. stm32之USART学习
  8. asp.net去掉HTML标记代码
  9. hdu3622 二分+2sat
  10. 【Android Gradle 插件】gradle.properties 中配置编译参数并在 Java 代码 BuildConfig 中调用该参数