相关疑难解决方法(0)

在C#中取消订阅匿名方法

是否可以从事件中取消订阅匿名方法?

如果我订阅这样的事件:

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)

是否有可能取消订阅这种匿名方法?如果是这样,怎么样?

c# delegates anonymous-methods

214
推荐指数
7
解决办法
7万
查看次数

单次活动订阅

我相信这是不可能的,但我会问.

为了对事件进行单次订阅,我经常发现自己使用这种(自我发明的)模式:

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)

c# events boilerplate

12
推荐指数
1
解决办法
1831
查看次数

标签 统计

c# ×2

anonymous-methods ×1

boilerplate ×1

delegates ×1

events ×1