装箱百万奖金,第六届全国工业互联网数据创新应用大赛火热报名中! 了解详情
写点什么

C# 8.x 先睹为快

  • 2019-07-05
  • 本文字数:923 字

    阅读完需:约 3 分钟

C# 8.x 先睹为快

尽管 C# 8.0 还需要几个月的时间才能发布,但是 C# 8.x 的特性计划已经开始了。该计划中的特性有一些是新提出的,而另外一些则是之前在 C# 8 中考虑过的。和往常一样,这个特性列表仍可能会发生变化。


如之前的一个报告所讨论的那样,Caller Expression Attribute 特性允许函数捕获用于生成其参数的表达式。它主要用于断言和自动化测试。


new 关键字类型推断(正式名称为目标类型“new”表达式),能在通过上下文可以确定类型名称的情况下减少样板代码。


虽然目前对于Defer 声明 的反对率高达到 3:1,但是在 8.x 版本,Defer 声明仍然在考虑的特性列表中。


NULL 增强公共类型

这实际上是两个需求(#33#881),它使我们在处理可为空值类型和三元运算符时不再需要添加显式强制转换了。在 NULL 增强公共类型的建议下,将允许如下的使用场景。


int a;int? x1 = condition ? a : null;

int? b;double c;double? x2 = condition ? b : c;
复制代码


在推断数组类型或 lambda 表达式的返回类型时,也支持这种改进。


声明表达式

基于 C 语言的一个特性是赋值是表达式,而不仅仅是语句。这允许了诸如 a=b=c=0 的快捷赋值方式,但也允许了诸如 if(a=false)的错误。因此,许多设计指南都禁止在另一个语句中修改变量。


C# 一直在相反的方向上发展,它能够在诸如输出参数等新的地方定义变量,并作为模式匹配的一部分。使用声明表达式,我们几乎可以在任何可以执行赋值的地方声明变量。


以前你需要写如下的代码,


char ch;while ((ch = GetNextChar()) == 'a' || ch == 'b' || ch == 'c')
复制代码


现在它可以缩短成如下代码:


while ((char ch = GetNextChar()) == 'a' || ch == 'b' || ch == 'c')
复制代码


下面是你可能会写的另一个示例:


var sum = (var p = GetPoint(); p.X + p.Y);
复制代码


在解构时混合声明和变量是一种相关特性的能力。它首次是在 C# 7.1 中提出的,它将允许在新定义某些(而不是全部)变量时进行多重赋值。


(x, var y) = e;
复制代码


本地函数改进

本地函数的一个限制是它们不能应用属性(这只是 C# 的一个限制;CLR 允许这样做)。在 C# 8 中,它可能引起问题的原因是,可能需要诸如 NotNullWhenTrue 之类的属性来为可空性检查获取正确的语义。


再比如,使用本地函数的属性可以更方便地配置 ASP.NET 的路由


原文链接:


Preview of C# 8.x


2019-07-05 08:0016296
用户头像

发布了 182 篇内容, 共 83.6 次阅读, 收获喜欢 486 次。

关注

评论

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

小程序容器技术,或许是提升智能设备安全等级的又一解决方案

Speedoooo

浏览器安全 小程序容器

阳振坤:分布式技术引领关系数据库发展

OceanBase 数据库

令人头疼的Javascript隐式&强制转换

hellocoder2029

JavaScript

【愚公系列】2022年10月 Go教学课程 024-函数

愚公搬代码

10月月更

详解CAN总线:CAN总线报文格式—过载帧

不脱发的程序猿

汽车电子 CAN总线报文格式 详解CAN总线 CAN过载帧

Spring Boot「02」日志配置

Samson

Java spring 学习笔记 spring-boot 10月月更

一文了解 Python 中的对象比较方法 is 和 ==及其本质

宇宙之一粟

Python 10月月更

深度理解NodeJS事件循环

coder2028

node.js

后端Java随机比大小游戏实战讲解

魏铁锤

10月月更

一文读懂Js中的this指向

hellocoder2029

JavaScript

Red Hat Releases OptaPlanner 8

OptaPlanner中文

时间旅行调试与自动化测试的支持

iofod jude

前端 低代码

js作用域、作用域链和它的一些优化

hellocoder2029

JavaScript

被翻译成 12 种语言的深度学习名著重磅升级,75%新内容,让你豁然开朗!

图灵教育

Python 深度学习

webpack模块化的原理

Geek_02d948

webpack

DataOps核心理念是什么?包括哪些模块?

雨果

DataOps

数字化转型最核心的是数据吗?不,是数据思维

雨果

数字化转型 数据思维

详解CAN总线:CAN总线报文格式—帧间隔

不脱发的程序猿

汽车电子 CAN总线报文格式 详解CAN总线 CAN帧间隔

webpack热更新原理(面试大概率会问)

Geek_02d948

webpack

Vue组件入门(一)组件定义及使用

Augus

Vue3 10月月更

被翻译成 12 种语言的深度学习名著重磅升级,75%新内容,让你豁然开朗!

图灵社区

Python 深度学习

我为什么要使用 Tauri 构建 macOS 磁盘清理工具 PrettyClean

NinetyH

tauri ​Rust

详解CAN总线:CAN总线报文格式—遥控帧

不脱发的程序猿

汽车电子 CAN总线报文格式 详解CAN总线 CAN遥控帧

详解CAN总线:CAN总线报文格式—错误帧

不脱发的程序猿

汽车电子 CAN总线报文格式 详解CAN总线 CAN错误帧

爬虫练习题(五)

张立梵

10月月更

星汉未来 | 云原生薪火计划——开源大使招募

星汉未来

开源 开发者 云原生 星汉未来 FinOps

理解NodeJS多进程

coder2028

node.js

从手动测试到自动化测试(上)

FunTester

为什么最近关注“元数据”的人突然增多?

雨果

元数据 元数据管理 元数据管理平台

说说Nodejs高并发的原理

coder2028

node.js

数据治理,七种常犯的错误

雨果

数据治理

C# 8.x 先睹为快_语言 & 开发_Jonathan Allen_InfoQ精选文章