我正在尝试使代表订阅在List<KeyValuePair<KeyEnum, Delegate>
中举行的活动
目标是将一系列处理程序与键盘键和命名轴相关联,二者均由Enums表示。
调度非常容易,我只需要遍历KVP列表,检查条件,如果条件满足,就可以简单地使用member.Value;
调用委托。在此方面,我没有遇到任何效率方面的问题,并且事实上,已经发现它在堆栈上明显更清洁。
实例化后,该问题正在添加到委托中。用collection.FirstOrDefault(n=>n.Key == KeyEnum.W).Value+= SomeMethod
尝试访问它不起作用,因为Value
是只读的。
有没有一种方法不需要每次都创建一个新的KeyValuePair
,或者通常比KeyValuePair
更好的解决方案
最佳答案
只需使用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](...);
}