在枚举时插入队列

BCS*_*BCS 0 c# queue breadth-first-search data-structures

我想使用Queue对树进行广度优先搜索

var q = new Queue<T>();

q.Enqueue(Root);

foreach(T root in q)
{
  foreach(T t in root.Children)
    q.Enqueue(t);
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了"在实例化枚举器之后修改了集合".例外.

我可以用C#类型吗?


编辑:一点点阅读让我觉得我可能做错了.

有没有办法使用foreach从队列中出队?


这工作但很难看(OMHO)

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);
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*yon 8

您无法枚举IEnumerable并同时更改相同的IEnumerable.我不认为有一个C#Collection会允许这样做.