C#是否应该阻止将事件取消挂钩两次?

MaT*_*MaT 5 .net c# events delegates

如果一个事件被钩住,后来在应用程序中被取消钩住,那么我会尝试再次将其解钩。
我应该防止这种情况吗?

private void MyFunctionCalledWheneverIWant()
{
    // Second unhook : Should I prevent this ? How ?
    myObject.MyEventHandler -= MyEvent;
}

public void MyEvent()
{
    // First unhook
    myObject.MyEventHandler -= MyEvent;
}
Run Code Online (Sandbox Code Playgroud)

Car*_*ine 9

正如 @puneet 和 @MaartenVanSambeek 指出的那样,取消订阅两次不会造成问题。如果您想添加检查,可以通过 GetInitationList 执行此操作,并浏览列表以验证您是否有订阅。如果是这样取消订阅。

if(MyEventHandler!=null)
{
    foreach ( Delegate existingHandler in  MyEventHandler.GetInvocationList())
    {
        if ( existingHandler == MyEvent)
        {
            myObject.MyEventHandler -= MyEvent;
            return;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Maa*_*eek 5

分离事件处理程序两次不是问题,如果事件仅附加一次,则第二次分离将不执行任何操作。