当前位置: 首页 > news >正文

c# 字典存储的委托失效?

之前写了一个简单的事件工具类,使用字典来进行存储。
当时想的是使用TryGetValue少进行一次遍历。在项目使用中发现只有一个事件生效。后续在注册的事件无法生效。

当时的写法

        private readonly Dictionary<int, Action<IEventMessage>> mListeners;/// <summary>/// 注册事件/// </summary>public IUnRegister Register<TEvent>(Action<IEventMessage> listener) where TEvent : IEventMessage{int eventId = typeof(TEvent).GetHashCode();if (mListeners.TryGetValue(eventId,out var listeners)){listeners += listener;}else{mListeners.Add(eventId, listener);}return new CustomUnRegister(() => UnRegister<TEvent>(listener));}

更改后的写法

        private readonly Dictionary<int, Action<IEventMessage>> mListeners;/// <summary>/// 注册事件/// </summary>public IUnRegister Register<TEvent>(Action<IEventMessage> listener) where TEvent : IEventMessage{int eventId = typeof(TEvent).GetHashCode();if (mListeners.ContainsKey(eventId)){mListeners[eventId] += listener;}else{mListeners.Add(eventId, listener);}return new CustomUnRegister(() => UnRegister<TEvent>(listener));}

deepseek的回答:
在这里插入图片描述
可以使用下面代码验证上述回答

        Action action = () =>{Debug.Log("action");};Action action2 = action;action += () =>{Debug.Log("action +=");};action.Invoke();Debug.Log("-------------------------------------------");action2.Invoke();

在这里插入图片描述

相关文章:

  • 结合建筑业务讲述TOGAF标准处理哪种架构
  • 毕业论文超清pdf带标签导出
  • goc命令大全
  • spring boot应用部署IIS
  • 【软件测试】
  • Docker安装与介绍(一)
  • Trae,字节跳动推出的 AI 编程助手插件
  • 进程控制(下)【Linux操作系统】
  • linux下C++性能调优常用的工具
  • AcWing 11:背包问题求方案数 ← 0-1背包
  • 科学研究:怎么做
  • [密码学基础]国密算法深度解析:中国密码标准的自主化之路
  • 计算机软考中级 知识点记忆——排序算法 冒泡排序-插入排序- 归并排序等 各种排序算法知识点整理
  • 腾讯云对象存储m3u8文件使用腾讯播放器播放
  • React 文章列表
  • 2024-04-19| Java: Documented注解学习 JavaDoc
  • 高可靠 ZIP 压缩方案兼容 Office、PDF、TXT 和图片的二阶段回退机制
  • 2025.04.19【Chord diagram】| 弦图绘制技巧大全
  • JavaScript 变量语法扩展
  • Ubuntu 25.04 “Plucky Puffin” 正式发布
  • 对话地铁读书人|科研服务者岳先生:地铁适合浅阅读
  • “80后”辽宁石油化工大学副校长杨占旭已任阜新市领导
  • 圆桌|并购重组迎政策红利期,并购基金如何把握发展机遇?
  • 大运河博物馆展出江苏国画院精品:傅抱石与八大郑板桥们
  • 分析|开门红:一季度GDP增长5.4%超预期,市场活力信心增强
  • 春日有滋味 | 蚕豆、春笋、喉黑鱼和活麻