是否可以从事件中取消订阅匿名方法?
如果我订阅这样的事件:
void MyMethod()
{
Console.WriteLine("I did it!");
}
MyEvent += MyMethod;
Run Code Online (Sandbox Code Playgroud)
我可以这样取消订阅:
MyEvent -= MyMethod;
Run Code Online (Sandbox Code Playgroud)
但是如果我使用匿名方法订阅:
MyEvent += delegate(){Console.WriteLine("I did it!");};
Run Code Online (Sandbox Code Playgroud)
是否有可能取消订阅这种匿名方法?如果是这样,怎么样?
我相信这是不可能的,但我会问.
为了对事件进行单次订阅,我经常发现自己使用这种(自我发明的)模式:
EventHandler handler=null;
handler = (sender, e) =>
{
SomeEvent -= handler;
Initialize();
};
SomeEvent += handler;
Run Code Online (Sandbox Code Playgroud)
这是相当多的锅炉板,它也使Resharper对改装后的瓶盖抱怨.有没有办法将此模式转换为扩展方法或类似方法?这样做的更好方法是什么?
理想情况下,我喜欢这样的东西:
SomeEvent.OneShot(handler)
Run Code Online (Sandbox Code Playgroud)