调用事件,h(args)vs EventName?.Invoke()

时间:2016-05-06 15:42:56

标签: c# events

我总是这样调用事件

MyEvent?.Invoke(this, new MyEventArgs(someArg));

今天VS 2015告诉我这可以简化:

?

关于后一种方法的一些问题,我以前没见过:

  1. 大概是事件名后的.Invoke()检查处理程序是否为空?
  2. 假设处理程序不为空,?.Invoke()似乎很简单
  3. 我已经使用了第一个例子多年,并意识到它可以防止竞争条件......可能第二个例子的__> cd /Users/your_root_name/.android/avd也是如此?

1 个答案:

答案 0 :(得分:7)

  

据推测?在事件名称之后检查处理程序是否为空?

是。它是C#6中引入的空条件运算符。它在各种方面都很有用。

  

我已经使用了第一个例子多年,并意识到它可以防止竞争条件...大概第二个例子的?.Invoke()也是如此? (见问题#1)

是。基本上,它们是等价的。特别是,它两次评估MyEvent表达式。它会对它进行一次计算,然后如果结果为非null,则会在其上调用Invoke