使用 null 条件运算符和操作
Using the null conditional operator and actions
我有以下 class:
public class MyClass
{
public Action SomeAction { get; set; }
}
在调用 SomeAction
之前 c#-6.0 因为它有可能成为 null
我们会做这样的事情:
var action = SomeAction;
if (action != null)
{
action();
}
但是,在 c#-6.0 中,我们现在有了空条件运算符,因此可以将上面的代码写为:
SomeAction?.Invoke();
但是,由于 Invoke
调用,我发现它的可读性稍差。在这种情况下是否可以在没有 Invoke
调用的情况下使用 null 条件运算符?类似于:
SomeAction?();
不,C# 6.0 或 7.0 中没有这样的语法。 The null conditional operator 有两种形式:
- 空条件成员访问
?.
,您已经拒绝了,因为它过于冗长
- 空条件索引
?[
,这对委托没有意义(并且不能作为扩展添加,或类似的东西)
文档甚至直接提到了这一点:
You need to explicitly call the Invoke
method because there is no null-conditional delegate invocation syntax PropertyChanged?(e)
. There were too many ambiguous parsing situations to allow it.
我有以下 class:
public class MyClass
{
public Action SomeAction { get; set; }
}
在调用 SomeAction
之前 c#-6.0 因为它有可能成为 null
我们会做这样的事情:
var action = SomeAction;
if (action != null)
{
action();
}
但是,在 c#-6.0 中,我们现在有了空条件运算符,因此可以将上面的代码写为:
SomeAction?.Invoke();
但是,由于 Invoke
调用,我发现它的可读性稍差。在这种情况下是否可以在没有 Invoke
调用的情况下使用 null 条件运算符?类似于:
SomeAction?();
不,C# 6.0 或 7.0 中没有这样的语法。 The null conditional operator 有两种形式:
- 空条件成员访问
?.
,您已经拒绝了,因为它过于冗长 - 空条件索引
?[
,这对委托没有意义(并且不能作为扩展添加,或类似的东西)
文档甚至直接提到了这一点:
You need to explicitly call the
Invoke
method because there is no null-conditional delegate invocation syntaxPropertyChanged?(e)
. There were too many ambiguous parsing situations to allow it.