清除所有活动订阅(已克隆链接)

mat*_*ias 5 c# events clone

我刚从IClo​​neable实现了Clone,并意识到我的源实例的事件订阅也随之而来.有清除所有这些的好方法吗?

目前我正在为每个事件使用几个这样的循环来清理所有事情.

foreach (var eventhandler in OnIdChanged.GetInvocationList())
{
    OnIdChanged -= (ItemEventHandler) eventhandler;
}

foreach (var eventhandler in OnNameChanged.GetInvocationList())
{
    ...
Run Code Online (Sandbox Code Playgroud)

这工作正常,但稍微混乱了代码.最担心的是事件悬空.

Jen*_*und 2

我认为你可以设置OnIdChanged = null你的克隆对象。

创建克隆后,您只需调用ClearEvents克隆上的方法即可。

public class ClonedObject
{
    public event EventHandler OnIdChanged;
    public event EventHandler OnNameChanged;

    public void ClearEvents()
    {
        OnIdChanged = null;
        OnNameChanged = null;
    }
}
Run Code Online (Sandbox Code Playgroud)