Type? v = x?.y?.z;
if (v.HasValue) {
var value = v.GetValueOrDefault();
// code using value
}
据我所知,Type?
表明Type
是空的,但假设x
,y
以及z
是当地居民有哪些呢x?.y?.z
是什么意思?
Answers:
它是Null传播算子/ Null-Conditional算子?。C#6.0中提出的新功能
x?.y?.z
手段
x
不为null,然后检查 y
否则返回null,y
,如果x不为null,则返回,z
否则返回null。最终的返回值将是z
或null
。
如果没有此运算符x
,则如果为null,则访问x.y
将引发Null Reference Exception,Null-Conditional运算符有助于避免显式检查null。
这是避免Null引用异常的一种方法。
请参阅:了解C#中即将推出的语言功能
8-空条件运算符
有时,代码倾向于在null检查中淹没。使用空条件运算符可以仅在接收者不为空时访问成员和元素,否则提供空结果:
int? length = customers?.Length; // null if customers is null
??
是非常不同的:x ?? y
就像x != null ? x : y
。而x?.y
像x != null ? x.y : null
。
z
或null