Ich denke, die in der Antwort verwiesene Dokumentation ist extrem irreführend. Die Reihenfolge von For Each
wird durch die Sammlung definiert, die es genannt wird (d. H. Seine Implementierung von IEnumerable
/IEnumerable<T>
), aber das ist nicht das gleiche wie sagen, es sollte nicht verwendet werden, wenn die Reihenfolge wichtig ist. Viele Sammlungen (wie Arrays, List<T>
usw.) gehen immer in der "natürlichen" Reihenfolge.
Teil der Dokumentation, auf diese nicht anspielen:
Traversierfolgeliste. Wenn Sie eine For Each ... Next-Schleife ausführen, wird das Durchlaufen der -Auflistung unter der Kontrolle des Enumeratorobjekts , das von der GetEnumerator-Methode zurückgegeben wird. Die Reihenfolge traversal wird nicht von Visual Basic, sondern von der MoveNext Methode des Enumerator-Objekts bestimmt. Diese bedeutet, dass Sie möglicherweise nicht in der Lage vorherzusagen, welches Element der Sammlung ist die erste, die in Element zurückgegeben wird, oder die nächste nach einem gegebenen Element zurückgegeben wird.
Das ist nicht bei allen das gleiche ist wie sagen, es kann sich nicht darauf verlassen - es auf verlassen können, wenn Sie wissen, dass die Sammlung Sie iterieren werden die Ergebnisse in der gewünschten Reihenfolge erzeugen. Es ist nicht so, als würde es Elemente zufällig auswählen. Das Verhalten in Bezug auf IEnumerable
/IEnumerable<T>
ist auf dieser Seite klar definiert.
Die wichtigsten Ausnahmen zu vorhersagbaren Ordnungen sind Wörterbücher und Mengen, die natürlich ungeordnet sind.
Um ein IEnumerable<T>
verwenden Enumerable.Reverse
zu umkehren - aber wenn Sie in umgekehrter Richtung über eine Sammlung iterieren müssen, die von Position (wie ein Array oder List<T>
) indiziert ist, dann wäre es effizienter sein, eine For
Schleife an dem Start zu verwenden, Ende und rückwärts arbeiten.
Dank Jon, es ist immer ein Vergnügen, Ihre Eingabe und Einsicht zu erhalten: D – Anders
Warum ist diese Antwort nicht die akzeptierte? Es Beispiele mehr indept –
@DotNet Programmer: das war alte Post, dass ich erkannte, dass ich die REAL Antwort nicht zurück, wenn :) :) richtiges Kredit ist jetzt gegeben worden (nicht, dass Jon braucht mehr Punkte sowieso: P) – Anders