我以前没有使用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
改为使用时,没有错误,因此它必须对队列本身的更改做一些事情,因为 Dequeue 删除了对象。我最初的猜测是它抱怨我正在修改一个由枚举器迭代的集合,但是出队是在循环之外执行的?
任何想法可能导致此问题?
谢谢