Csharp/C#教程:在C#中使用Lambda的UnHooking事件#分享


在C#中使用Lambda的UnHooking事件#

我经常遇到想要订阅事件的情况,但我想使用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在引擎盖下创建了一个匿名委托,我没有什么可以调用的-= on。

现在,我可以创建一个方法:

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

然后我可以挂钩/取消所有我想要的东西:

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

但我真的非常非常喜欢使用我的lambda。 在一个更复杂的例子中,lambdas在这里非常方便。

我很确定我运气不好……但是我想知道是否有人想出办法来做到这一点?

不可思议的是,没有一个很好的方法可以做到这一点。 您真的遇到了两种选择之一

这个问题已经被问到了

答案是:将lambda放在一个变量中。

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

好吧,如果你知道你的代码是唯一一个连接事件的代码,那么为事件变量赋值null将删除所有代理(但如果你希望代码是可扩展的,那么可能是非常糟糕的代码)。

否则,您应该将lambda保留在一个单独的变量中,并使用它来解开事件。

上述就是C#学习教程:在C#中使用Lambda的UnHooking事件#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1043376.html

(0)
上一篇 2022年1月31日
下一篇 2022年1月31日

精彩推荐