c#为事件订阅存储在字典中的委托

本文关键字:字典 存储 事件 | 更新日期: 2023-09-27 18:17:10

我正在c#中工作,该系统将匿名委托保存到字典(允许我稍后取消绑定)并将其绑定到事件:

public static Dictionary<int, Dictionary<List<string>,Action>> boundActions;
public delegate void EventListener();
public Dictionary<int,EventListener> listenerMap;

public void bindListener(int actionID, List<string> actionArgs, int listenerID)
{
        boundActions[actionID][actionArgs]=delegate(){actions.getAction(actionID, actionArgs).Invoke ();};
        listenerMap[listenerID]+=boundActions[actionID][actionArgs];
        
}
public void unbindListener(int actionID, List<string> actionArgs, int listenerID)
{
        listenerMap[listenerID]-=boundActions[actionID][actionArgs];
        
}

然而,这种方法不能编译,给我以下错误:

错误CS0019:操作符'+='不能应用于类型的操作数ItemListeners.EventListenerSystem.Action

错误CS0019:操作符'-='不能应用于类型的操作数ItemListeners.EventListenerSystem.Action

我处理问题的方法不正确吗?有没有更好的方法,或者我可以让它这样工作?也许类型Action是错误的?

提前感谢!

c#为事件订阅存储在字典中的委托

check this

public static Dictionary<int, Dictionary<List<string>, EventListener>> boundActions;
public delegate void EventListener();
public Dictionary<int, EventListener> listenerMap;
public void bindListener(int actionID, List<string> actionArgs, int listenerID)
{
    boundActions[actionID][actionArgs] = new EventListener(delegate { actions.getAction(actionID, actionArgs).Invoke(); });
    listenerMap[listenerID] += boundActions[actionID][actionArgs];
}
public void unbindListener(int actionID, List<string> actionArgs, int listenerID)
{
    listenerMap[listenerID] -= boundActions[actionID][actionArgs];
}