Раньше я не использовал 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 удаляет объект. Мое первоначальное предположение состоит в том, что он жалуется на то, что я изменяю коллекцию, которая повторяется Enumerator, но удаление из очереди выполняется вне цикла?
Любые идеи, что может быть причиной этой проблемы?
Спасибо
while(queue.Any()) queue.Dequeue();
- person Telemat   schedule 14.02.2015