我总是这样调用事件
void onSomeEvent(string someArg) {
var h = this.EventName;
if (h != null) {
h(this, new MyEventArgs(someArg));
}
}
今天 VS 2015 告诉我这可以简化:
MyEvent?.Invoke(this, new MyEventArgs(someArg));
关于后一种方法的一些问题,我以前从未见过:
- 大概是
?
事件名称之后是检查处理程序是否为空?
- 假设处理程序不为空,
.Invoke()
看起来很简单
- 我已经使用第一个例子很多年了,并意识到它可以防止竞争条件......大概是
?.Invoke()
第二个例子的也是如此吗?
大概是?事件名称之后是检查处理程序是否为空?
是的。它是 C# 6 中引入的 null 条件运算符。它在各种方面都很有用。
我已经使用第一个例子很多年了,并意识到它可以防止竞争条件......大概是?.Invoke()
第二个例子的也是如此吗? (参见问题#1)
是的。基本上,它们是等效的。特别是,它确实not评估MyEvent
表达两次。它对其求值一次,然后如果结果非空,则调用Invoke
on it.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)