我正在尝试为代表订阅在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 关注
- 75 浏览
添加回答
举报
0/150
提交
取消