写点什么

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

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

关注

评论

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

linux之curl使用技巧

入门小站

在线字符或文本转二进制工具

入门小站

工具

西昊智能家具2022新品发布,硬实力为健康撑腰

极客天地

「AuthTalk」今晚 7 点直播|从制造到“智造”,探索制造企业破局之道

Authing

云原生 身份云 制造业 Idaas

Crypto巨头们ALL IN元宇宙,PlatoFarm或能突围

BlockChain先知

密码学系列之:X.690和对应的BER CER DER编码

程序那些事

密码学 程序那些事 5月月更

【安全】揭秘小白如何从0到1逆袭成为安全工程师

网络安全学海

网络安全 安全 信息安全 渗透测试

BuilderPattern-建造者模式

梁歪歪 ♚

设计模式

FactoryMethodPattern-工厂方法模式

梁歪歪 ♚

设计模式

Crypto们纷纷聚焦“Building platonic”,PlatoFarm是解决方案吗?

股市老人

Jenkins Agent 的低成本高弹性实践

玄月九

Kubernetes jenkins 弹性 降本 Kaniko

RocketMQ 5.0: 存储计算分离新思路

阿里巴巴中间件

阿里云 开源 云原生 消息队列 Apache RocketMQ

朋友圈架构设计

intelamd

在线HTML转Javascript工具

入门小站

工具

2.4 航线图介绍

Geek_古藤模根

图数据库实战 Gremlin

WPF|快速添加新手引导功能(支持MVVM)

沙漠尽头的狼

C# WPF 新手引导

Vue框架学习笔记【day二】

恒山其若陋兮

5月月更

架构实战营-模块2作业

Elvis FAN

下篇:技术 Leader 的思考方式

阿里巴巴中间件

阿里云 中间件 技术分享

研发效能团队规模、职能划分和优劣势分析概述(第一篇)

laofo

DevOps cicd 研发效能 组织架构 平台建设

MSVC编译环境介绍

Loken

音视频 5月月更

Angular 项目里使用 scss 文件的一些技巧

汪子熙

typescript 前端 前端开发 angular 5月月更

OKALEIDO简化玩家进入NFT的门槛,做NFT界的UNISWAP

股市老人

Java设计模式系列学习

梁歪歪 ♚

设计模式

LabVIEW控制Arduino驱动1602液晶显示屏(基础篇—10)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT 驱动1602液晶显示屏

SingletonPattern-单例模式

梁歪歪 ♚

设计模式

AbstractFactoryPattern-抽象工厂模式

梁歪歪 ♚

设计模式

LabVIEW控制Arduino实现舵机联控(基础篇—9)

不脱发的程序猿

单片机 LabVIEW Arduino LIAT 舵机联控

PrototypePattern-原型模式

梁歪歪 ♚

设计模式

TreeSet源码分析

zarmnosaj

5月月更

上篇:技术架构的设计方法

阿里巴巴中间件

阿里云 中间件 技术分享 技术思考

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