我经常遇到这样的情况:我想订阅一个事件,但我想使用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函数非常方便。
我相信我已经没有什么办法了......但我想知道是否有人已经找到了一种方法来解决这个问题?