将代表存储在字典中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将代表存储在字典中相关的知识,希望对你有一定的参考价值。
我试图让代表们参加在List<KeyValuePair<KeyEnum, Delegate>
举行的活动
目标是将一系列处理程序与键盘键和命名轴相关联,这两个键都由枚举表示
调度相当容易,我只是遍历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](...);
}
以上是关于将代表存储在字典中的主要内容,如果未能解决你的问题,请参考以下文章