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
表示
- 首先,检查
是否不为null,然后检查x
否则返回nully
- 其次,当x不为null时,检查
,如果它不为null,则返回y
,否则返回nullz
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();