写点什么

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

  • 2019-01-28
  • 本文字数:716 字

    阅读完需:约 2 分钟

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

在很多情况下,一个地方只允许出现一种可能的类型。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


2019-01-28 08:004781
用户头像

发布了 731 篇内容, 共 483.2 次阅读, 收获喜欢 2008 次。

关注

评论

发布
暂无评论
发现更多内容

解析 HashMap 源码之基本操作 put

shengjk1

Java hashmap

翻译: Effective Go (6)

申屠鹏会

翻译 Go 语言

Spring如何选择类构造器

申屠鹏会

翻译 Go 语言

学习技术先从学会使用搜索引擎开始

我是程序员小贱

1 时间复杂度总结

我是程序员小贱

Elasticsearch学习

张明森

troubleshoot之:使用JFR分析性能问题

程序那些事

Java 性能分析 jfr

平均负载是什么?

我是程序员小贱

如何学习一个框架?

云起

翻译: Effective Go (7)

申屠鹏会

翻译 Go 语言

让你起飞的20个Linux命令骚操作

我是程序员小贱

解析 HashMap 源码概括

shengjk1

Java hashmap

阿里、力扣、政采云的15位专家分享前端面试与招聘视角

三钻

面试 大前端

敏捷到底是个什么鬼?

刘华Kenneth

程序员 敏捷 change

航运区块链 抗疫危中有机

CECBC

区块链 航运

1 学习性能优化的要点

我是程序员小贱

docker入个门

书旅

Docker 容器 Dockerfile

高效程序员的45个习惯:敏捷开发修炼之道(1)

石云升

读书笔记 敏捷开发

Rust特征与泛型区别点

编号94530

rust 泛型 封装、继承、多态

这样看mybatis,谁都会分析源码!

诸葛小猿

源码 mybatis mybatis源码

如何隐藏你的数据库密码

Rayjun

安全 服务器

解析 hashMap 源码之基本操作 get

shengjk1

Java hashmap

Docker搭建PHP+Nginx+MySQL+Redis

书旅

Docker 镜像 lnmp

毕玄大佬的分享以及给我的感悟

白色蜗牛

Java 程序员 技术 职场 架构师

华为的“少年天才”攀登者,出发向智能存储的“奥林帕斯山”

脑极体

MySQL 基准测试

多选参数

MySQL

真正的异步API网关Agate

dinstone

Async API Gateway

MEDO 项目开发中遇到的问题汇总

陈皮

你生日那天的宇宙什么样子知道?我全部给你吧!

我是程序员小贱

为什么考研,考研能给你带来什么?说说我的感受!

我是程序员小贱

Apache Mina和Netty的历史

dinstone

C# 8的新提案:new关键字类型推断_语言 & 开发_Jonathan Allen_InfoQ精选文章