C# 字典删除失败

这是在 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 的事实,但是我该如何解决呢?


(显然因为声誉低而无法标记字典)


qq_笑_17
浏览 225回答 1
1回答

白衣染霜花

问题是你从来没有将敌人的wave领域设置为 wavecontroller 对象。所以它试图从一个空的波控制器而不是实际的波控制器中移除敌人。实例化敌人时,将其波场设置为this。
打开App,查看更多内容
随时随地看视频慕课网APP