C# 事件和 Lambdas,空检查的替代方法?

标签 c#

有人看到任何缺点吗?应该注意的是,您不能从事件委托(delegate)列表中删除匿名方法,我知道这一点(实际上这是概念上的动机)。

这里的目标是替代:

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<T>(this EventHandler<EventArgs<T>> handler, object sender, T args) {
        if (handler != null)
            handler(sender, new EventArgs<T>(args));
    }
}

现在只是:

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

关于C# 事件和 Lambdas,空检查的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2877809/

相关文章:

c# - IIS 中的 HTTP 重定向问题,在浏览器上不断出现 ERR_TOO_MANY_REDIRECTS

c# - WCF 服务出现未知类型错误

c# - 我在 SQL 中发现一对(零或一) Entity Framework 关系的重复行 - 如何/为什么?

c# - 向接口(interface)属性添加约束

c# - 更好的 Enumerable.Range 升序和降序范围?

c# 在执行之前构建任务列表

c# - 如何为所有页面设置 Async ="true"?

c# - MemoryMappedFile.CreateNew(...) 是否保证创建一个带零的文件?

c# - 需要帮助使用 ASP.NET MVC 2 框架的实体

c# - 在 C# .NET 4.5 中使用 SAML 2.0