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

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

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

Dictionary<string, List<int>> 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"表达式提案被采用,那么就不再需要这些样板代码. 从表面上看,这个特性看起来与va ...

  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. Java项目:茶叶售卖商城系统(java+SSM+JSP+EasyUi+mysql)
  2. 详解通用物体检测算法:基于锚框与无需锚框
  3. 2019做的第一个艰难决定
  4. Java Websocket实例
  5. quartus FIR仿真笔记
  6. 这相册一出手,哪个长辈搞不定?
  7. python如何引发和处理异常_在python3.6中,如何捕捉异常并引发异常以便稍后处理?...
  8. c++ 模糊搜索 正则表达式_c++使用正则表达式提取关键字的方法
  9. 解决:My97DatePicker 日期插件引用在PHP文件中maxDate和minDate控制失效问题
  10. JavaScript之语句
  11. mac word 复制自动产生书签
  12. STM32用ST-LINK V2-1烧录后,不会自动重启执行的解决办法
  13. STM32工具使用---STM32CubeProgrammer更新固件
  14. 查询当前数据库名、用户名、数据库服务器IP、端口、数据库版本信息。
  15. JS面试题汇总(八)
  16. 音视频开发——H265码流解析
  17. 移动APP导航栏设计对比
  18. 第一次有人把5G讲得这么简单明了!
  19. 你画我猜 计算机题目,你画我猜题目带图答案 [你画我猜题目800例]
  20. 云平台架构知识点总结

热门文章

  1. 公用ip地址查询_是什么使您无法更改公用IP地址并在Internet上造成严重破坏?
  2. leetcode 128最长连续序列
  3. Java多线程编程 — 锁优化
  4. Valid Number
  5. CSS浮动属性Float到底什么怎么回事,下面详细解释一下
  6. 12c分页查询特性FETCH FIRST ROWS,OFFSET ROWS FETCH NEXT ROW LIMIT Clause子句
  7. 易成新能加码光伏产业链 作价28.29亿收购赛维两子公司
  8. Linux命令之tar等
  9. 深入浅出Docker(三):Docker开源之路
  10. python类库32[多线程同步Lock+RLock+Semaphore+Event]