Я не использовал Queues
раньше, так что Возможно, мне не хватает чего-то очевидного. Я пытаюсь перебрать Queue
следующим образом (каждый кадр):
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, но удаление из очереди выполняется вне цикла?
Есть идеи, что могло вызвать эту проблему?
Спасибо