为什么使用EventArgs.Empty而不是null?

时间:2008-10-09 19:01:05

标签: c# events eventargs

我记得在多次和多个地点阅读,在解雇典型事件时:

protected virtual OnSomethingHappened()
{
    this.SomethingHappened(this, EventArgs.Empty);
}
如果没有有趣的事件参数,则应该是EventArgs.Empty,而不是null。

我遵循了我的代码中的指导,但我意识到我不清楚为什么这是首选技术。为什么声明的合约更喜欢EventArgs.Empty而不是null?

6 个答案:

答案 0 :(得分:33)

我相信NOT NULL背后的原因是当作为参数传递时,该方法不需要潜在地处理空引用异常。

如果传递null,并且该方法尝试使用e执行某些操作,则会获得空引用异常,而不会使用EventArgs.Empty。

答案 1 :(得分:27)

EventArgs.EmptyNull object pattern

的一个实例

基本上,让对象表示“无值”,以避免在使用时检查为空。

答案 2 :(得分:7)

我相信EventArgs.Empty用于维护使用事件传递参数的约定,即使不需要也是如此。

Mitchel Sellers在我的帖子中间发布了我的另一半原因:如果方法尝试并使用该参数执行某些操作,它会阻止空引用异常(除了检查它是否为null)。

EventArgs.Empty基本上完成了全局定义的事件参数的工作,没有其他信息。

为了给出维护约定的类似示例,我们的团队使用string.Empty初始化字符串,因为否则不同的编码器可能会使用newString = ""; or newString = " "; or newString = null;,所有这些都可能针对不同的检查条件产生不同的结果。

使用EventArgs.Empty vs new EventArgs()的一个(略显迂腐)原因是前者没有初始化新的EventArgs,节省了少量内存。

答案 3 :(得分:2)

如果您使用的是通用方法,该方法具有从任何事件处理程序调用的EventHandler签名,并且同时传递 object sender { {1}} ,它可以调用EventArgs e,例如,用于记录事件,而不必担心空指针异常。

答案 4 :(得分:0)

我使用了很长时间“new EventArgs()”而不是“EventArgs.Empty”...我认为重要的是传递一些不会导致Null异常的东西。

答案 5 :(得分:0)

来自Albahari的书:"in order to avoid unnecessarily instantiating an instance of EventArgs."