我没用过Queues<T>
之前的任何真实程度,所以我可能会遗漏一些明显的东西。我正在尝试遍历 Queue<EnemyUserControl>
像这样(每一帧):
foreach (var e in qEnemy)
{
//enemy AI code
}
当一个敌人死亡时,敌人用户控件引发一个我订阅的事件,我这样做(队列中的第一个敌人被设计移除):
void Enemy_Killed(object sender, EventArgs e)
{
qEnemy.Dequeue();
//Added TrimExcess to check if the error was caused by NULL values in the Queue (it wasn't :))
qEnemy.TrimExcess();
}
但是,在调用 Dequeue 方法之后,我得到一个 InvalidOperationException
在 foreach
上环形。当我使用 Peek
相反,没有错误,因此它必须对 Queue 本身的更改做一些事情,因为 Dequeue 会删除对象。
我最初的猜测是它提示我正在修改一个由枚举器迭代的集合,但是出列是在循环外执行的?
有什么可能导致此问题的想法吗?
谢谢
最佳答案
我知道这是一篇旧帖子,但以下内容呢:
var queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
while (queue.Count > 0)
{
var val = queue.Dequeue();
}
干杯
关于c# - 队列 ForEach 循环抛出 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234087/