C# 9.0 新特性预览 - 空参数校验
Published on2020-05-13
-Views
1Minutes Read
C# 9.0 新特性预览 - 空参数校验
[2020年9月10日更新:此特性已移入下一版本,将不在 C# 9.0 中提供]
前言
随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大家展示它们。
目录
[C# 9.0 新特性预览 - Lambda 中的弃元]
[C# 9.0 新特性预览 - Record 类型]
[C# 9.0 新特性预览 - 模式匹配的改善]
[C# 9.0 新特性预览 - 其他小的变化]
简便的空参数校验 (Simplified Null Argument Checking)
目的
这个特性主要是为了更简便的检查方法的参数是否为 null 并抛出 ArgumentNullExceptiony 异常。
语法
语法很简单,在参数名后加个叹号即可:
以上代码会被翻译为:
想必有些同学已经从上面代码看出来了,这个生成的空校验,只是校验参数是否为 null,这也就意味着它无法在值类型上使用,以下代码将报错:
当然,可空的值类型是可以的,但是编译器会提示一条警告,提示你在可空类型上进行了空检查:
类似的,在参数拥有默认值的情况下,也会提示警告
构造方法的场景
在构造方法的场景下,空参数校验将发生在任何其他代码的前面,包括:
- 对其他构造方法的链式调用,即 this() 或 base()
- 在构造方法内的隐式字段初始化
举个例子:
以上代码会大致翻译为以下伪代码:
Lambda 的场景
这个特性在 lambda 中也可以使用
不可以使用的场景
这个特性只能用于有方法体的方法中,也就意味着它不能用于抽象方法、接口、委托和部分方法。
以下代码编译器会报错:
不能用于属性。因为属性 setter 中的 value 是隐式的,不会出现在参数列表中,所以此特性不适用于属性。
不能用于 out / ref / in 的参数
参考
Tags:
#Blog