C# Language?(空条件运算符)

示例

6.0

在C#6.0中引入的Null条件运算符,如果其左侧的表达式的计算结果为,?.则将立即返回,而不是抛出。如果其左侧求值为非值,则将其视为普通运算符。请注意,由于它可能返回,因此其返回类型始终是可为空的类型。这意味着对于结构或原始类型,将其包装为。nullnullNullReferenceExceptionnull.nullNullable<T>

var bar = Foo.GetBar()?.Value; // 如果GetBar()返回null,则将返回null
var baz = Foo.GetBar()?.IntegerValue; // baz will be of type Nullable<int>, i.e. int?

触发事件时,这很方便。通常,您必须将事件调用包装在if语句中以进行检查,null然后再引发事件,这会引入竞争条件的可能性。使用Null条件运算符可以通过以下方式解决此问题:

event EventHandler<string> RaiseMe;
RaiseMe?.Invoke("Event raised");