我還沒有使用Queues<T>
之前的任何真正的程度,所以我可能會失去明顯的東西。我試圖通過Queue<EnemyUserControl>
像這樣(每幀)進行迭代:Queue ForEach循環拋出InvalidOperationException
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();
}
然而,出列方法被調用後,我坐上foreach
循環的InvalidOperationException
。當我使用Peek
代替時,沒有錯誤,所以它必須對Queue本身進行更改,因爲Dequeue刪除了該對象。 我最初的猜測是它抱怨說我正在修改由Enumerator迭代的集合,但是在循環之外執行出列?
任何想法可能會導致此問題?
謝謝
您應該使用 '而(queue.Any())queue.Dequeue();' – Telemat 2015-02-14 09:45:35