我经常遇到想要订阅事件的情况,但我想使用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");
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我不知道如何取消事件.由于lambda在引擎盖下创建了一个匿名委托,所以我没有什么可以调用-=的.
现在,我可以创建一个方法:
private void SomethingHappened(object sender, EventArgs args)
{
Console.WriteLine("Something Happened");
}
Run Code Online (Sandbox Code Playgroud)
然后我可以挂钩/取消所有我想要的东西:
observable.SomethingHappened += SomethingHappened;
observable.SomethingHappened -= SomethingHappened;
Run Code Online (Sandbox Code Playgroud)
但我真的非常非常喜欢使用我的lambda.在一个更复杂的例子中,lambdas在这里非常方便.
我很确定我运气不好......但我想知道是否有人想出办法做到这一点?
Ste*_*ger 10
这个问题已经被问到了
答案是:将lambda放在一个变量中.
EventHandler handler = (sender, args) => Console.WriteLine("Something Happened");
observable.SomethingHappened += handler;
observable.SomethingHappened -= handler;
Run Code Online (Sandbox Code Playgroud)
不可思议的是,没有一个很好的方法可以做到这一点.你真的陷入了两种选择之一
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |