在字典中存储代表

我正在尝试为代表订阅在List<KeyValuePair<KeyEnum, Delegate>

目标是将一系列处理程序与键盘键和命名轴相关联,两者都由枚举表示

调度相当容易,我只是遍历 KVP 列表,检查一个条件,如果满足条件,就简单地调用委托,member.Value;我没有遇到任何处理器时间效率问题,事实上,有发现它在堆栈上明显更干净。

问题是在实例化后添加到代表。尝试访问它collection.FirstOrDefault(n=>n.Key == KeyEnum.W).Value+= SomeMethod不起作用,因为Value它是只读的。

有没有一种方法不需要KeyValuePair每次都创建一个新的,或者比KeyValuePair一般情况下更好的解决方案


Helenr
浏览 76回答 1
1回答

冉冉说

只需使用Dictionary<KeyEnum, Action>. 我不明白为什么您需要对 KVP 进行顺序访问。如果可以,您还应该指定与事件处理程序对应的委托类型。Action或EventHandler或Action<Something>取决于您的需要。然后您可以轻松添加和调用委托:// adding delegatesif (dictionary.ContainsKey(KeyEnum.W)) {&nbsp; &nbsp; dictionary[KeyEnum.W] += SomeMethod;} else {&nbsp; &nbsp; dictionary.Add(KeyEnum.W, SomeMethod);}// calling delegatesif (dictionary.ContainsKey(KeyEnum.W)) {&nbsp; &nbsp; dictionary[KeyEnum.W](...);}
打开App,查看更多内容
随时随地看视频慕课网APP