写点什么

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:004751
用户头像

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

关注

评论

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

生态对对碰丨OceanBase如何与Prometheus与Grafana监控结合

OceanBase 数据库

Grafana Prometheus oceanbase

Oceanbase 读写分离方案探索与优化

OceanBase 数据库

分布式数据库 读写分离 oceanbase

富滇银行完成数字化升级|OceanBase数据库助力布局分布式架构中台

OceanBase 数据库

分布式数据库 oceanbase

OceanBase 源码解读(十五):Location Cache 模块浅析

OceanBase 数据库

数据库 oceanbase 源码解读

深入浅出 ODP(一):功能模块及特性详解

OceanBase 数据库

数据库 oceanbase

[ Kitex 源码解读 ] 代码解读思路的总结

baiyutang

字节跳动 微服务 kitex 6月月更

模块七作业: 王者荣耀商城异地多活架构设计

凯博无线

程序员们,快把这款AI“魔法”做到手机相机里,求求了

最新动态

OceanBase数据库荣获领先科技成果“新技术”奖

OceanBase 数据库

oceanbase 数博会

OceanBase 成为信通院首批可信开源社区、可信开源项目

OceanBase 数据库

开源 oceanbase 信通院

通用池化框架GenericObjectPool性能测试

FunTester

基于 RDMA 的分布式系统研究进展

OceanBase 数据库

RDMA

【愚公系列】2022年06月 二十三种设计模式(二十)-状态模式(State Pattern)

愚公搬代码

6月月更

OceanBase 源码解读(十四):集群位置信息的存储与汇报

OceanBase 数据库

数据库 oceanbase 集群位置信息

几经波折,InfluxDB的TSDB C位还能做多久?

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

InfoQ 极客传媒 15 周年庆征文 | 轻量级状态机COLA StateMachine保姆级入门教程

Zhendong

Java 架构设计 状态机 InfoQ极客传媒15周年庆

万物并作,吾以观复|OceanBase 政企行业实践

OceanBase 数据库

数据库 oceanbase

创建一个springboot服务就是这么简单

乌龟哥哥

6月月更

如何快速上手AIRIOT?

AIRIOT

物联网 低代码平台

【动态规划入门篇】只需三步解决它

知心宝贝

算法 前端 动态规划 Leet Code 6月月更

王者荣耀商城异地多活架构设计

大眼喵

「架构实战营」

Vue框架学习笔记 每天学习----四

恒山其若陋兮

6月月更

idea社区版和商业版有什么区别

源字节1号

软件开发

内存数据库和磁盘数据库哪个更强?

OceanBase 数据库

内存数据库 oceanbase 磁盘数据库

聊聊 Sharding-Jdbc 的原理-初篇

Nick

MySQL 分库分表 中间件 ShardingJDBC 6月月更

产教融合加速数据库人才培养 | OceanBase数据库大赛10强诞生

OceanBase 数据库

数据库 oceanbase 产教融合

生态对对碰丨详解 Flink CDC+OceanBase 全增量一体化数据集成方案

OceanBase 数据库

数据库 oceanbase Flink CDC

【Go实现】实践GoF的23种设计模式:原型模式

元闰子

Go 设计模式 原型模式

王者荣耀商城异地多活架构设计

dan629xy

模块7作业

KennyQ

模块七:王者荣耀商城异地多活架构

jiaoxn

「架构实战营」

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