将代表存储在字典中

问题描述 投票:2回答:1

我试图让代表们参加在List<KeyValuePair<KeyEnum, Delegate>举行的活动

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

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

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

有没有办法做到这一点,不需要每次创建一个新的KeyValuePair,或一般比KeyValuePair更好的解决方案

c# .net linq delegates keyvaluepair
1个回答
0
投票

只需使用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](...);
}
© www.soinside.com 2019 - 2024. All rights reserved.