我正在嘗試為代表訂閱在List<KeyValuePair<KeyEnum, Delegate>目標是將一系列處理程序與鍵盤鍵和命名軸相關聯,兩者都由枚舉表示調度相當容易,我只是遍歷 KVP 列表,檢查一個條件,如果滿足條件,就簡單地調用委托,member.Value;我沒有遇到任何處理器時間效率問題,事實上,有發現它在堆棧上明顯更干凈。問題是在實例化后添加到代表。嘗試訪問它collection.FirstOrDefault(n=>n.Key == KeyEnum.W).Value+= SomeMethod不起作用,因為Value它是只讀的。有沒有一種方法不需要KeyValuePair每次都創建一個新的,或者比KeyValuePair一般情況下更好的解決方案
1 回答

冉冉說
TA貢獻1877條經驗 獲得超1個贊
只需使用Dictionary<KeyEnum, Action>. 我不明白為什么您需要對 KVP 進行順序訪問。如果可以,您還應該指定與事件處理程序對應的委托類型。Action或EventHandler或Action<Something>取決于您的需要。
然后您可以輕松添加和調用委托:
// adding delegates
if (dictionary.ContainsKey(KeyEnum.W)) {
dictionary[KeyEnum.W] += SomeMethod;
} else {
dictionary.Add(KeyEnum.W, SomeMethod);
}
// calling delegates
if (dictionary.ContainsKey(KeyEnum.W)) {
dictionary[KeyEnum.W](...);
}
- 1 回答
- 0 關注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消