Коллекция выглядит так:
public class myList : List { }
Мне нужно повторять цикл до тех пор, пока он добавляет новые элементы:
do {
newObjectAdded = false;
foreach (myClass obj in myList) {
//...
if (some_condition) {
myList.Add(newObj);
newObjectAdded = true;}
//...
}
} while (newObjectAdded);
После того, как в лист добавится элемент, в строке foreach (myClass obj in myList) я получаю ошибку - коллекция была изменена, невозможно выполнить операцию перечисления.
Можно заменить foreach на цикл с итератором, но от этого обращение к объектам станет довольно громоздким. Ещё есть вариант с заменой списка на LinkedList, но это ещё хуже, в данном случае.
Существует ли какой-то более элегантный способ?
Ответ
Сам разобрался.
Достаточно написать:
foreach (myClass obj in myList.ToArray()) {
Комментариев нет:
Отправить комментарий