Ist der IEnumerator von .Net IList bietet die Reihenfolge der Liste?
-
13-09-2019 - |
Frage
Kann ich davon ausgehen, dass die IEnumerator
ich von einem IList
erhalten (durch die GetEnumerator
Methode aus dem IEnumerable
Schnittstelle Aufruf) gibt mir die Elemente in der Reihenfolge der Liste?
Lösung
Sie können nicht, weil IList eine Schnittstelle und eine Implementierung kann Elemente in beliebiger Reihenfolge auflisten. Zum Beispiel könnte ich implemenent WeirdList: IList, und habe es Elemente in irgendeiner Weise aufzählen, einschließlich nicht-deterministisch. Wenn Sie eine Liste (T) auf der anderen Seite verwenden, garantiert es Elemente in der Reihenfolge aufzuzählen sie in der Liste gespeichert werden.
Bearbeiten : Dass gesagt wird, wie viele andere darauf hin, die meisten Implementierungen wird die Semantik der List (T) folgen. Obwohl das war nicht das, was Sie gefragt;)
Andere Tipps
Das enumerator sollten Sie auf die Objekte in der Liste in Bezug auf ihre Position im Speicher zuzugreifen, die die gleichen wie mit dem Indexer der Liste von 0 bis Länge <1 in einem for-Schleife gehen würden.
Edit: , antwortete ich speziell in Bezug auf die .NET-Framework-Klassen, die IList implementieren, sollte eine andere Person diese Schnittstellen implementieren ihre tatsächliche Umsetzung so gut wie alles sein könnte. Es hängt also von Implementierer.
Ja, es wird genau das tun, für jede anständige Umsetzung IList
zumindest. Eine gute IList
soll immer seine Elemente in der gleichen Reihenfolge aufzählen, wie in dem die Liste indiziert ist.
List<int> list = new List<int> { 1, 1, 2, 3, 5, 8 };
IEnumerator<int> enumtor = list.GetEnumerator();
while (enumtor.MoveNext())
{
Console.Write(enumtor.Current);
}
Prints 112358
.
Dies hängt von der Umsetzung des IList