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
是什么意思?
请注意,此语言function仅在C#6及更高版本中可用。
这实际上相当于:
x == null ? null : xy == null ? null : xyz
换句话说,做xyz
是一种“安全”的方式,其中任何一个属性都可能为null。
同样相关的是空合并运算符(??) ,它提供了替代null
。
它是零传播运算符/空条件运算符? C#6.0中提出的一个新function
x?.y?.z
表示
- 首先检查
x
是否为空,然后检查y
否则返回null, - 其次,当x不为空时,检查
y
,如果不是null,则返回z
否则返回null。
最终的返回值将是z
或null
。
没有这个运算符,如果x
为null,那么访问xy
将引发一个Null引用exception,Null-Conditional运算符有助于避免显式检查null。
这是避免空引用exception的一种方法。
请参阅: 了解C#中即将推出的语言function
8 – 空条件运算符
有时候,代码往往会在空值检查中淹没一点。 空条件运算符允许您只有在接收者不为null时才访问成员和元素,否则提供一个空结果:
int? length = customers?.Length; // null if customers is null
this.SlimShadies.FirstOrDefault(s => s.IsTheReal)?.PleaseStandUp();
基本上。