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

C# 字典删除失败

C# 字典删除失败

C#
qq_笑_17 2021-07-06 17:29:14
这是在 Unity 中。当我尝试删除已添加到此特定词典中的元素时,删除失败并且我不理解该行为。这是声明:private Dictionary<int, EnemyControler> remainingMobs = new Dictionary<int, EnemyControler>();在某些时候,我这样做:remainingMobs.Add(newEnemy.MobID, newEnemy);MobID 是一个 int 我每次创建一个新的敌人时都会增加当敌人死亡时,在他的 Destroy() 方法中,他调用:public void EnemyDied(int someID) {    if(remainingMobs.Remove(someID)) {        print("removed "+someID);    } else {        print("Failed to remove " + someID);        DisplayRemainingMobs();    }}这是 DisplayRemainingMobs 方法:public void DisplayRemainingMobs() {    string availableKeys="";    foreach (KeyValuePair<int, EnemyControler> pair in remainingMobs){        availableKeys+= pair.Key + ", ";    }    print(remainingMobs.Keys.Count + " are available : " + availableKeys);}这就是事情出错的地方。当我之前调用 DisplayRemainingMobs() 时,输出是:2 可用 : 1, 2,这完全符合预期。但是,当我杀死我产生的两个中的一个,并在字典上调用 .remove() 时,打印的输出变为:删除失败 20 可用:我不明白为什么 .remove() 失败,也不明白为什么失败后没有更多可用的密钥。我尝试了很多东西,包括将 int 交换为 string,认为它可能来自那里。我无法调试它,我打印的任何内容只告诉我它应该可以工作。在我的测试中,数字匹配。我什至制作了一个完整的功能,我在另一本专门为此制作的字典上使用所有这些功能,可以肯定的是,一切都按预期进行。我记得它可能来自于从方法调用 remove 的事实,但是我该如何解决呢?(显然因为声誉低而无法标记字典)
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

问题是你从来没有将敌人的wave领域设置为 wavecontroller 对象。所以它试图从一个空的波控制器而不是实际的波控制器中移除敌人。实例化敌人时,将其波场设置为this


查看完整回答
反对 回复 2021-07-18
  • 1 回答
  • 0 关注
  • 224 浏览

添加回答

举报

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