当前位置: 首页 > 编程语言 > C#

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

时间:2023-04-11 00:14:12 C#

在C##中使用Lambda的UnHooking事件经常遇到想订阅事件,却想用lambda来实现的情况:publicclassObservable{publicevent事件处理器publicvoidDoSomething(){//做某事...OnSomethingHappened();}}//在其他地方,我挂钩事件observable.SomethingHappened+=(sender,args)=>Console.WriteLine("SomethingHappened");我遇到的问题是我不知道如何取消活动。由于lambda在幕后创建了一个匿名委托,所以我没有什么可调用的-=on。现在,我可以创建一个方法:privatevoidSomethingHappened(objectsender,EventArgsargs){Console.WriteLine("SomethingHappened");然后我可以挂钩/解钩所有我想要的:observable.SomethingHappened+=SomethingHappened;observable.SomethingHappened-=SomethingHappened;但我真的非常喜欢使用我的lambda。在一个更复杂的示例中,lambda在这里非常有用。我很确定我运气不好......但我想知道是否有人想出办法做到这一点?奇迹般地,没有一个很好的方法来做到这一点。你真的被两个选项之一困住了这个问题已经被问过,答案是:把lambda放在一个变量中。EventHandlerhandler=(sender,args)=>Console.WriteLine("SomethingHappened");observable.SomethingHappened+=处理程序;observable.SomethingHappened-=处理程序;好吧,如果您知道您的代码是唯一连接事件的代码,那么将null值分配给事件变量将删除所有委托(但如果您希望代码可扩展,则可能是非常糟糕的代码)。否则,您应该将lambda保留在一个单独的变量中并使用它来解包事件。以上就是C#学习教程:在C#中使用Lambda的UnHooking事件,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: