C#模式匹配的初步规范包含以下代码示例:
Type? v = x?.y?.z;
if (v.HasValue) {
var value = v.GetValueOrDefault();
// code using value
}
我知道
Type?
表示Type
可为空,但假设x
、y
和z
是本地变量,x?.y?.z
是什么意思?C#模式匹配的初步规范包含以下代码示例:
Type? v = x?.y?.z;
if (v.HasValue) {
var value = v.GetValueOrDefault();
// code using value
}
Type?
表示Type
可为空,但假设x
、y
和z
是本地变量,x?.y?.z
是什么意思?请注意,此语言功能仅适用于C# 6及更高版本。
它实际上相当于:
x == null ? null
: x.y == null ? null
: x.y.z
换句话说,这是一种“安全”的方式来执行x.y.z
,因为沿途的任何属性都可能为null。null
的值。Null-Conditional Operator ?是C# 6.0中推出的新特性。
x?.y?.z
意味着:
x
是否不为空,然后检查y
,否则返回null,x
不为空时,检查y
,如果不为空,则返回z
,否则返回null。最终返回值将是z
或null
。
如果没有这个运算符,如果x
为空,则访问x.y
将引发Null Reference Exception,而Null-Conditional运算符可以帮助避免显式检查null。
它是一种避免Null Reference Exception的方式。
详见:Getting a sense of the upcoming language features in C#
8 - Null-conditional operators
有时候代码会淹没在对null的检查中。Null-conditional运算符允许您仅在接收器不为null时访问成员和元素,否则提供null结果:
int? length = customers?.Length; // null if customers is null
??
和x!=null ? x:y
是不同的:x ?? y
相当于x != null ? x : y
。而x?.y
相当于x != null ? x.y : null
。 - Tim S.z
或null
。 - Habib this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();
基本上。