一千萬個為什麽

搜索

C#Events和Lambdas,替代null check?

有人看到任何缺點嗎?應該註意的是,您無法從事件委托列表中刪除匿名方法,我知道這一點(實際上這是概念動機)。

這裏的目標是替代:

if (onFoo != null) onFoo.Invoke(this, null);

和代碼:

public delegate void FooDelegate(object sender, EventArgs e);

public class EventTest
{
    public EventTest()
    {
        onFoo += (p,q) => { };
    }

    public FireFoo()
    {
         onFoo.Invoke(this, null);
    }

    public event FooDelegate onFoo;

}

最佳答案

另一種方法是改為使用擴展方法:

public static class EventExtensions {
    public static void Fire(this EventHandler> handler, object sender, T args) {
        if (handler != null)
            handler(sender, new EventArgs(args));
    }
}

現在它只是:

TimeExpired.Fire(this, new EventArgs());

轉載註明原文: C#Events和Lambdas,替代null check?