ich eine Breitensuche eines Baumes mit einer QueueEinfügen in eine Warteschlange, während er aufzählt
var q = new Queue<T>();
q.Enqueue(Root);
foreach(T root in q)
{
foreach(T t in root.Children)
q.Enqueue(t);
}
Allerdings erhalte ich eine tun will „Collection wurde geändert, nachdem die enumerator instanziiert wurde.“ Ausnahme.
Gibt es einen C# -Typ, mit dem ich das machen kann?
Edit: ein wenig lesen machen mich Sache, ich könnte das total falsch machen.
Gibt es eine Möglichkeit, eine Foreach aus einer Warteschlange herauszuziehen?
das funktioniert, ist aber hässlich (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);
}
Was macht Ihr Arbeitsbeispiel effektiv? Wenn ich etwas nicht verpasse, fügen Sie fortwährend Dinge hinzu und entfernen dann Elemente, die schließlich mit einer leeren Warteschlange enden. Soll die Verarbeitung nach dem "Dequeue" -Befehl erfolgen? –