为了账号安全,请及时绑定邮箱和手机立即绑定

在字典中存储代表

在字典中存储代表

C#
Helenr 2022-10-23 15:09:23
我正在尝试为代表订阅在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](...);

}


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信