一千萬個為什麽

搜索

在C#中與Lambdas解除事件

我經常遇到想要訂閱事件的情況,但我想使用lambda來實現:

public class Observable
{
    public event EventHandler SomethingHappened;

    public void DoSomething()
    {
       //Do Something...
        OnSomethingHappened();
    }
}

// Somewhere else, I hook the event
observable.SomethingHappened += (sender, args) => Console.WriteLine("Something Happened");

我遇到的問題是我不知道如何解除事件。由於lambda創建了匿名委托,所以我沒有什麽可以調用 - =

現在,我可以創建一個方法:

private void SomethingHappened(object sender, EventArgs args)
{
    Console.WriteLine("Something Happened");
}

然後我可以鉤住/解除我想要的一切:

observable.SomethingHappened += SomethingHappened;
observable.SomethingHappened -= SomethingHappened;

但我真的,真的很想用我的lambda代替。在一個更復雜的例子中,lambda在這裏非常方便。

我非常肯定,我運氣不佳......但我想知道有沒有人找到了這樣做的方法?

最佳答案

這個問題已經被問到

答案是:把你的lambda放入一個變量中。

EventHandler handler = (sender, args) => Console.WriteLine("Something Happened");
observable.SomethingHappened +=  handler;
observable.SomethingHappened -=  handler;

轉載註明原文: 在C#中與Lambdas解除事件