Я хочу выполнить поиск по дереву в ширину, используя очередь
var q = new Queue<T>();
q.Enqueue(Root);
foreach(T root in q)
{
foreach(T t in root.Children)
q.Enqueue(t);
}
Однако я получаю сообщение «Коллекция была изменена после создания экземпляра перечислителя». Исключение.
Есть ли тип С#, с которым я могу это сделать?
Редактировать: небольшое чтение заставило меня подумать, что я могу делать это совершенно неправильно.
Есть ли способ использовать foreach для удаления из очереди?
это работает, но некрасиво (ОМХО)
var q = new Queue<T>();
q.Enqueue(Root);
while(q.Count > 0)
{
T root = q.Dequeue();
foreach(T t in root.Children)
q.Enqueue(t);
}