Это типичное поведение счетчиков.Большинство перечислителей предназначены для правильной работы только в том случае, если базовая коллекция остается статической.Если коллекция изменяется при перечислении коллекции, то следующий вызов MoveNext
, который вводится для вас блоком foreach
, сгенерирует это исключение.
Операция Dequeue
, очевидно, изменяет коллекциюи это то, что вызывает проблему.Обходной путь - добавить каждый элемент, который вы хотите удалить из целевой коллекции, во вторую коллекцию.После завершения цикла вы можете перебрать второй набор и удалить его из цели.
Однако, это может быть немного неудобно, по крайней мере, так как операция Dequeue
удаляет только следующий элемент,Возможно, вам придется переключиться на другой тип коллекции, который допускает произвольное удаление.
Если вы хотите придерживаться Queue
, то вам придется вывести из очереди каждый элемент и условно поставить в очередь те элементы, которые не должныудалить.Вам все еще понадобится вторая коллекция, чтобы отслеживать предметы, которые можно пропустить в очереди.