【发布时间】:2009-05-13 19:30:08
【问题描述】:
我经常遇到想订阅一个事件,但又想使用 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 在这里非常方便。
我很确定我很不走运……但我想知道是否有人想出了办法做到这一点?
【问题讨论】: