写点什么

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

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

关注

评论

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

太棒了!终于有大佬把“消息队列”核心知识点全都总结出来了

Java 编程 架构 面试 架构师

Java从建表语句中提取索引信息, 索引名称,复合索引包含字段,索引类别(普通索引/主键索引/唯一索引/全文索引/空间索引)解决方案

张音乐

数据库 索引 9月日更

LeetCode刷题283-简单-移动零

ベ布小禅

9月日更

卖NFT表情包赚上百万,区块链技术终于找到了真正价值?

CECBC

从 ClickHouse 到自研 ByteHouse:实时数据分析场景下的优化实践

火山引擎开发者社区

Clickhouse

用友YonSuite在基于六力模型的SaaS产品中位居业界前列

海比研究院

高并发系统SoEasy!Alibaba全新出品亿级并发设计速成笔记真香

Java 编程 架构 面试 架构师

做百度AI工程师,还要会“相牛”?

百度大脑

人工智能

【墨天轮专访第三期】达梦数据库冯源:丢掉幻想投入战斗,国产数据库的机遇窗口已经来临!

墨天轮

数据库 国产数据库 达梦

Promise.race() 原理解析及使用指南

devpoint

异步 Promise 9月日更

三涧溪村:乡村产业插上数字化翅膀

工业互联网

架构实战营模块7课后作业

燕燕 yen yen

架构实战营

为什么说敏捷开发是应用程序的未来?

优秀

敏捷开发

关于比特币和区块链的3件重要事项

CECBC

学习笔记:TCP传输控制协议(一)

姬翔

9月日更

自动交Y机器人开发|市值机器人源码搭建

量化系统19942438797

金融科技成为服贸会热议话题:数字化转型中如何保障金融安全

CECBC

两种定时任务调度器对比

xyu

定时任务 Go 语言

冒死上传!阿里内部最新版“SpringCloud Alibaba手册”细节拉满

Java 编程 架构 面试 架构师

渗透测试入门指南之小白该如何学习渗透?

网络安全学海

黑客 网络安全 信息安全 WEB安全 渗透测试·

NeonIO 云原生存储简介与应用

QingStor分布式存储

云原生 分布式存储

关于takin-data,你想知道的都在这里(二)trace日志篇

TakinTalks稳定性社区

网络攻防学习笔记 Day128

穿过生命散发芬芳

开发安全 9月日更

架构实战营 模块七 作业

一雄

作业 架构实战营 模块七

从电视购物到电商直播,什么造就了「带货的参差」

融云 RongCloud

小游戏 合成

游戏开发_软件开发

浅谈实时语音质量监控系统

声网

音视频

关于takin-data,你想知道的都在这里(一)启动命令篇

TakinTalks稳定性社区

【LeetCode】数据流中的中位数Java题解

Albert

算法 LeetCode 9月日更

♟Go语言那些事儿之Redis连接与数据操作♟

Regan Yue

Go 语言 9月日更

MVP验证方向,差异化策略超越竞争

石云升

MVP 9月日更

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