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
可以为空,但假设x
、y
和z
是本地人,那么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。
最终返回值将是z
或null
。
如果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,我可能是在解释考虑他们两个不同的步骤。最终返回值将是 z
或 null
【参考方案3】:
this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();
基本上。
【讨论】:
以上是关于x?.y?.z 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章