取消订阅Lambda事件处理程序**关闭**

Ada*_*kis 5 c# lambda closures

我知道很多人都问过"如何取消订阅以下内容"的问题

myButton.Click += (s, e) => MessageBox.Show("Hello World!");
Run Code Online (Sandbox Code Playgroud)

有了明显的答案

EventHandler HelloWorld = delegate { MessageBox.Show("Hello World!"); };
myButton.Click -= HelloWorld;
myButton.Click += HelloWorld;
Run Code Online (Sandbox Code Playgroud)

但我正在使用lambda创建一个闭包?如果我的对象有一个叫做AssessmentRationChanged类型的事件Action,我就这样接线:

foreach (MassFMVUpdateDTO dto in CurrentProperties)
   dto.AssessmentRationChanged += () => setCellColorBasedOnAssessmentRatioValue(dto);
Run Code Online (Sandbox Code Playgroud)

如果有可能我已经为此循环中的部分/全部对象设置了此处理程序,该怎么办?有没有办法取消订阅?

我确信我可以使用反射并彻底清除处理程序,但是有更清洁的方法吗?

Jon*_*eet 5

不,你必须基本上存储对代表的引用.

记住以后要取消订阅的所有内容.