当前位置: 首页 > 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” 正式发布
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”
  • 保险经纪公司元保在纳斯达克挂牌上市,去年净赚4.36亿元
  • 近七成科创板公司2024年营收增长,285家营收创历史新高
  • 迎接八方来客:全国多地“五一”假期党政机关大院停车场免费开放
  • 笔墨如何“构城”?上海美院城市山水晋京展出
  • 海尔智家一季度营收791亿元:净利润增长15%,海外市场收入增超12%