写点什么

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

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

关注

评论

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

今年最值得关注的5个云趋势

云原生

云计算 数据分析 云原生 趋势 SaaS

2022 年值得期待的元宇宙技术

devpoint

defi Web3.0 1月月更 NTF

[架构实战营] 模块五作业

Geek_0ed632

「架构实战营」

08 Prometheus之警报管理

穿过生命散发芬芳

Prometheus 1月月更

来了!「年度最强技术答辩」看这里

阿里巴巴云原生

阿里云 Serverless RocketMQ 云原生 编程挑战赛

Elasticsearch核心原理系列:10张图理解Elasticsearch核心概念

慕枫技术笔记

后端 1月月更

爆肝一个月,我做了个免费的面试刷题网

程序员鱼皮

Java Python 编程 面试 计算机

第六周作业

lv

考试数据存储方案

皓月

#架构实战营 「架构实战营」

ReactNative进阶(九):API学习之注册组件AppRegistry

No Silver Bullet

React Native 1月月更 AppRegistry

从运维域看 Serverless 真的就是万能银弹吗?

阿里巴巴云原生

阿里云 Serverless 运维 云原生

一次无脑接口测试导致的无效排查的经历

liuzhen007

1月月更

在线JSON转PHP Array工具

入门小站

工具

电商系统微服务拆分和系统架构设计

drizzle

「架构实战营」

也谈谈Python的内存管理

宇宙之一粟

Python 内存管理 1月月更

模块四作业

whoami

「架构实战营」

一文看懂椭圆曲线签名算法

Rayjun

区块链 椭圆曲线

「程序员35岁被淘汰」已经22岁了

FunTester

程序员 职业发展 FunTester 35岁焦虑 35岁退休

急速学习C#死锁

喵叔

1月月更

模块 4 作业

miliving

深信服智能边缘计算平台与 OpenYurt 落地方案探索与实践

阿里巴巴云原生

阿里云 云原生 边缘计算 openyurt

Linux之tar命令

入门小站

Linux

关于常见状态码,你了解多少?

坚果

服务器 1月月更

2021 阿里云容器服务年度盘点:企业级容器应用变化和技术趋势观察

阿里巴巴云原生

阿里云 容器 运维 云原生

云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇

阿里巴巴云原生

阿里云 云原生 混沌工程

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

阿里巴巴云原生

阿里云 Serverless 云原生 MAll

常见网络安全专业术语

喀拉峻

黑客 网络安全 信息安全

架构实战营 第 4 期 模块四作业

架构实战营 模块四 「架构实战营」

Spring Boot CLI安装(WIN10、macOS系统)

JavaEdge

1月月更

「架构实战营」模块四《如何设计业务高性能高可用存储架构》作业

DaiChen

作业 模块四 「架构实战营」

白帽子渗透行为监控方案

明亮安全观

网络安全 信息安全 渗透测试 行为监控

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