我可以使用null条件运算符而不是经典事件引发模式吗?

时间:2015-09-23 08:03:32

标签: c# .net events c#-6.0

C#6.0添加了这个新的?.运算符,现在允许调用这样的事件:

someEvent?.Invoke(sender, args);

现在,根据我的阅读,这个运算符保证someEvent被评估一次。 使用这种调用而不是经典模式是否正确:

var copy = someEvent

if(copy != null)
  copy(sender, args)

我知道certain scenarios上面版本的模式需要额外的锁,但让我们假设最简单的情况。

1 个答案:

答案 0 :(得分:11)

请参阅Null-conditional Operators on MSDN

有一个例子涵盖了你的要求

没有空条件运算符

var handler = this.PropertyChanged;
if (handler != null)
    handler(…)

使用空条件运算符

PropertyChanged?.Invoke(e)
  

新方法是线程安全的,因为编译器只生成一次评估PropertyChanged的代码,将结果保存在临时变量中。