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

C# x?.y?.z是什么意思?,c#,pattern-matching,C#,Pattern Matching,的规范草案包含以下代码示例: 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

的规范草案包含以下代码示例:

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

,这是C#6.0中提出的一个新特性

x?.y?.z
表示

  • 首先,检查
    x
    是否不为null,然后检查
    y
    否则返回null
  • 其次,当x不为null时,检查
    y
    ,如果它不为null,则返回
    z
    ,否则返回null
最终返回值将是
z
null

如果
x
为null,则如果没有此运算符,则访问
x.y
将引发null引用异常,null条件运算符有助于避免显式检查null

这是一种避免空引用异常的方法

见:

8-空条件运算符

有时,代码往往会在空检查中淹没一些内容。这个 空条件运算符仅允许访问成员和元素 当接收器不为空时,否则提供空结果:


基本上。

nullcheck我猜..有没有人有其他链接可以链接到MSN OneDrive上没有的“C#中的模式匹配”规范草案?该链接在某些公司代理后断开:(我要补充的是,这是一个C#6功能。@tkocmathla不,
是完全不同的:
x??y
类似于
x!=null?x:y
x?.y
类似于
x!=null?x.y:null
@Tim.S。谢谢,很好的解释。@Habib它仍然错了“如果x不为null,则返回y,否则返回null,”。这不返回y,它返回x.y.z或null。@mclaassen,可能我是在解释两个不同的步骤。最终返回值可能是
z
null
我已经等了很久了。值得注意的是,x.y将只使用新语法计算一次,而使用当前等式计算两次uivalent(假设x和x.y不为空)。缩进使您的答案难以阅读。我个人会将冒号缩进到与匹配的问号相同的列中。@Kay:如果样式指南是这样工作的,chez-vous,欢迎您随意操作。:-@RevanProdigalKnight java 8和java 9没有计划,所以我想在接下来的10年里。
int? length = customers?.Length; // null if customers is null
 this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();