x?.y?.z是什么意思?

C#中的模式匹配草稿包含以下代码示例:

Type? v = x?.y?.z; if (v.HasValue) { var value = v.GetValueOrDefault(); // code using value } 

我明白Type? 表示Type可为空,但假设xyz是本地的,那么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。

最终的返回值将是znull

没有这个运算符,如果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(); 

基本上。