有什么聪明的方法可以避免在以常规方式调用事件之前测试事件的无效性的冗长性?看起来很明显,如果我调用一个代表,我希望它被分配。
(如果我真的想要/需要测试其无效性,我最终可以明确地进行,但是系统地进行此测试有点乏味且冗长。)
public delegate void ResetTradesDelegate();
public ResetTradesDelegate ResetTradesEvents;
public void OnSessionRxAdmMessage(IVfxFixAppSession session, FixMessage msg)
{
if (ResetTradesEvent != null) //<-- Is there "any" a way not to write this test explicitly for each delegate ?
ResetTradesEvent();
}
最佳答案
public event EventHandler NoDataEventHandler = delegate{};
以这种方式声明一个事件意味着它永远不会为空。至少将始终挂接一个无操作事件处理程序。
在你的情况下,可能
public event ResetTradesDelegate ResetTradesEvents = delegate{};
触发事件总是要具有与之相关的竞赛条件。您可能会冒险尝试在为空时调用委托(delegate),或者在事件取消钩挂后调用委托(delegate)。埃里克·利珀特(Eric Lippert)就here这个主题写了一篇相当全面的文章。上面的技术仍然遭受第二种竞争条件的困扰,因此在取消钩住事件之后,事件处理程序需要健壮才能被调用。
关于c# - 自检代表: avoid checking for null before invocation?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11459813/