You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Dictionary键不存在异常(KeyNotFoundException)排查

解决KeyNotFoundException:字典中不存在给定键的问题

看起来你在处理UpgradeManager的升级扫描逻辑时碰到了KeyNotFoundException,这是字典操作里很常见的问题,我来帮你梳理下排查和解决的思路:

核心问题定位

从调用栈能明确,错误出在Assets/Scripts/UpgradeManager.cs的第125行——你尝试用某个int键访问Dictionary<int, string>的Item属性时,这个键并没有被添加到字典中,这就是异常触发的直接原因。

具体排查与解决步骤

  • 先锁定目标键:找到第125行的代码,明确你用的是哪个键去访问字典。不管这个键是来自配置ID、计算值还是其他来源,先把它的具体数值打日志输出,确认它的真实内容。
  • 改用安全的字典访问方式:别直接用dict[key]这种容易抛出异常的写法,换成更稳妥的方式:
    • 用ContainsKey()做前置检查:
      int targetKey = // 你的目标键值
      if (yourDictionary.ContainsKey(targetKey))
      {
          string upgradeInfo = yourDictionary[targetKey];
          // 后续升级扫描逻辑
      }
      else
      {
          Debug.LogWarning($"警告:升级字典中找不到键 {targetKey},请检查数据初始化");
          // 这里可以添加降级逻辑,比如用默认值或者跳过该升级项
      }
      
    • 更推荐用TryGetValue()(原子操作,多线程场景下更安全):
      if (yourDictionary.TryGetValue(targetKey, out string upgradeInfo))
      {
          // 成功获取值,执行后续逻辑
      }
      else
      {
          // 键不存在时的处理逻辑
      }
      
  • 检查字典的初始化逻辑:确认在调用ScanForAvailableUpgrades()之前,字典已经被正确填充了所有需要的键值对。会不会是某些升级项的键漏加了?或者配置文件里的数据有缺失?可以在方法开头打印字典的所有键,验证目标键是否在其中:
    Debug.Log("当前升级字典包含的键:" + string.Join(", ", yourDictionary.Keys));
    
  • 核对注释与实际逻辑:你提到相关逻辑已在注释中说明,但实际运行出错,可能注释描述的键范围和代码中实际使用的键不匹配。再仔细对比注释里的预期键值和代码中生成/使用的键是否一致。

内容的提问来源于stack exchange,提问作者ForgedInFlame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:02:23