如何在 C# 中从操作委托中删除方法

本文关键字:删除 方法 操作 | 更新日期: 2023-09-27 18:17:34

可能的重复项:
C# 添加和删除匿名事件处理程序

假设我有一个以这种方式声明的操作委托:

public event Action<MenuTraverser.Actions> menuAction;

我以这种方式将一种方法与它相关联:

menuInputController.menuAction += (MenuTraverser.Actions action) => this.traverser.OnMenuAction(action);

现在,一切正常,但在某些情况下,我需要删除委托的方法,我不知道如何。我尝试了这种方式,但不起作用:

menuInputController.menuAction -= (MenuTraverser.Actions action) => this.traverser.OnMenuAction(action);

我怎么能做这样的事情?我需要不再调用我的方法 OnMenuAction。

如何在 C# 中从操作委托中删除方法

您需要将对

通用委托的引用存储到字段中,以便稍后可以使用此缓存的委托字段取消订阅:

// declare on a class fields level
Action<MenuTraverser.Action> cachedHandler; 
// in constructor initialize
cachedHandler = (action) => this.traverser.OnMenuAction(action);
// subscribe
menuInputController.menuAction += cachedHandler;
// unsubscribe
menuInputController.menuAction -= cachedHandler;

由于您的签名似乎匹配(假设您具有void返回类型(,因此您不需要添加匿名函数,但您可以直接使用方法组:

menuInputController.menuAction += this.traverser.OnMenuAction;

在这种情况下,取消订阅也应该有效:

menuInputController.menuAction -= this.traverser.OnMenuAction;