x?.y?.z 是啥意思?

Posted

技术标签:

【中文标题】x?.y?.z 是啥意思?【英文标题】:What does x?.y?.z mean?x?.y?.z 是什么意思? 【发布时间】:2014-10-01 02:39:44 【问题描述】:

Pattern Matching in C# 的规范草案包含以下代码示例:

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

我知道Type? 表示Type 可以为空,但假设xyz 是本地人,那么x?.y?.z 是什么意思?

【问题讨论】:

nullcheck 我假设.. 有没有人有关于“C# 中的模式匹配”草案规范的另一个链接,它不在 MSN OneDrive 上?该链接在某些公司代理后断开。 :( 【参考方案1】:

请注意,此语言功能仅在 C# 6 及更高版本中可用。

实际上相当于:

x == null ? null
   : x.y == null ? null
   : x.y.z

换句话说,这是一种“安全”的方式来处理x.y.z,其中任何属性都可能为空。

同样相关的是null coalescing operator (??),它提供了替代null的值。

【讨论】:

我已经等了很久了 值得注意的是,x.y 只会使用新语法计算一次,但使用当前等效语法计算两次(假设 x 和 x.y 不为空)。 缩进使您的答案难以阅读。我会在与匹配的问号相同的列上缩进冒号。 @Kay:如果风格指南就是这样运作的,那么欢迎您随心所欲。 :-) @RevanProdigalKnight 它没有安排在 java 8 和 java 9 上,所以我猜在未来 10 年内。【参考方案2】:

这是Null-propagating operator / Null-Conditional Operator ?. C# 6.0 中提出的新功能

x?.y?.z 表示

首先检查x是否不为null,然后检查y否则返回null, 其次,当x不为null时检查y,如果不为null则返回z,否则返回null。

最终返回值将是znull

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

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

见:Getting a sense of the upcoming language features in C#

8 - 空条件运算符

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

int? length = customers?.Length; // null if customers is null

【讨论】:

我要补充一点,这是一个 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,我可能是在解释考虑他们两个不同的步骤。最终返回值将是 znull【参考方案3】:
 this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();

基本上。

【讨论】:

以上是关于x?.y?.z 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

grad是啥意思啊(数学类)

请教matlab 的flow函数是啥意思?

&&是啥意思

html中表达式和%%都是啥意思,有啥区别吗?

VTK中,类vtkActor::GetMatrix(),这个4*4矩阵是啥意思??

SAS中的“.Z”是啥意思?