Ich habe eine Klasse wie:
%Vor%Ist es möglich, ein rekursives IEnumerable für die SplineCollection zu schreiben, in dem alle untergeordneten Elemente nacheinander zurückgegeben werden?
EDIT: Also Master ist die Wurzel Box, und die Hierarchie seiner Kinder kann jede Tiefe sein.
EDIT: Durch die Verwendung des Namens Box glaube ich einige Leute verwirrt zu haben. Es soll ein geometrisches Objekt sein, kein Container. Also ändere es auf Spline.
Ich würde mit der manuellen Verwaltung eines Stapels gehen, anstatt mich hier auf den Aufruf-Stack zu verlassen. Der Grund dafür ist, dass für jedes IEnumerable<Spline>
besucht ein neues Spline
erstellt werden müsste, wenn Sie den Aufruf-Stack verwenden, indem Sie rekursiv die Methode aufrufen, die die Nachkommen abruft. Das wäre ineffizient. Sie können das Traversal erheblich verbessern, indem Sie Ihren eigenen Stack verwenden.
Ja - in diesem Abschnitt finden Sie rekursive Iterationen mithilfe von C # -Iteratoren.
> Sie können dies von BoxCollection aufrufen, aber da Box bereits eine Sammlung von Boxen ist, sehe ich nicht, wofür BoxCollection gedacht ist. In diesem Fall würde die Verwendung von Box implement IEnumerable<Box>
oder eines seiner Nachkommen ( ICollection<Box>
, IList<Box>
) wahrscheinlich die Nützlichkeit verbessern.
Es ist auch möglich, es eher iterativ als rekursiv zu machen, was manchmal eine bessere Leistung hat (so ziemlich zu jeder Zeit, wenn der Compiler die Rekursion nicht in eine Interaktion umsetzt), aber rekursiv ist besser lesbar und normalerweise mehr als performant genug.
Ja, aber Sie müssen das rekursive Ergebnis aufzählen. Sie können es nicht einfach zurückgeben, weil der Typ nicht übereinstimmt.
%Vor%Tags und Links .net c# recursion collections ienumerable