当前位置: 首页 > 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();

在这里插入图片描述

http://www.dtcms.com/a/143312.html

相关文章:

  • 结合建筑业务讲述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” 正式发布
  • tensor.repeat和tensor.repeat_interleave
  • Invicti-Professional-V25.4
  • 【Python标准库】数学相关的9个标准库
  • 八大排序之直接插入排序
  • ELK日志系统
  • Kubernetes控制平面组件:高可用 APIServer
  • 详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链
  • 定制一款国密浏览器(10):移植SM2算法前,解决错误码的定义问题
  • 【Linux】软件管理机制和软件安装
  • 软件测试--自动化测试1