这是在 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() 时,打印的输出变为:
删除失败 2
0 可用:
我不明白为什么 .remove() 失败,也不明白为什么失败后没有更多可用的密钥。我尝试了很多东西,包括将 int 交换为 string,认为它可能来自那里。我无法调试它,我打印的任何内容只告诉我它应该可以工作。在我的测试中,数字匹配。
我什至制作了一个完整的功能,我在另一本专门为此制作的字典上使用所有这些功能,可以肯定的是,一切都按预期进行。
我记得它可能来自于从方法调用 remove 的事实,但是我该如何解决呢?
(显然因为声誉低而无法标记字典)
白衣染霜花
相关分类