簡體   English   中英

C#將存儲在字典中的委托訂閱到事件

[英]C# subscribing delegates stored in a dictionary to an event

我在使用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類型錯誤?

提前致謝!

檢查這個

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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM