我正在尝试使代表订阅在List<KeyValuePair<KeyEnum, Delegate>中举行的活动

目标是将一系列处理程序与键盘键和命名轴相关联,二者均由Enums表示。

调度非常容易,我只需要遍历KVP列表,检查条件,如果条件满足,就可以简单地使用member.Value;调用委托。在此方面,我没有遇到任何效率方面的问题,并且事实上,已经发现它在堆栈上明显更清洁。

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

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

最佳答案

只需使用Dictionary<KeyEnum, Action>。我不明白为什么您需要按顺序访问KVP。如果可以,还应该指定与事件处理程序相对应的委托类型。 ActionEventHandlerAction<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](...);
}

10-07 16:27