【发布时间】:2012-02-13 11:11:58
【问题描述】:
如果我有以下代码,我应该只调用 Action 还是应该调用 Action.Invoke?
public class ClassA
{
public event Action<string> OnAdd;
private void SomethingHappened()
{
if (OnAdd != null)
OnAdd("It Happened"); //Should it be OnAdd.Invoke("It Happened") ???????
}
}
public class ClassB
{
public ClassB()
{
var myClass = new ClassA();
myClass.OnAdd += Add;
}
private void Add(string Input)
{
//do something
}
}
【问题讨论】:
-
在 c# 6 中,使用新的
OnAdd?.Invoke("It Happened");语法可能最终会更受欢迎 -
上面评论的更多细节。该示例使用了 C# 6 的一个特性,即空条件运算符。这 ?如果 OnAdd 为空,则运算符会阻止调用 Invote 方法,从而防止异常。这允许编写放弃以下答案中显示的显式空检查的代码。请参阅msdn.microsoft.com/en-us/magazine/dn802602.aspx 了解更多详情。
-
这里有一些比较:jacksondunstan.com/articles/3283.