私はこれ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はオブジェクトを削除するため、キュー自体の変更に何らかの影響を与える必要があります。私の最初の推測では、列挙子によって繰り返されているコレクションを変更していると文句を言っていますが、デキューはループの外で実行されていますか?
この問題を引き起こしている可能性のあるアイデアはありますか?
ありがとう