Fa l'IEnumerator di .Net IList fornire l'ordine della lista?
-
13-09-2019 - |
Domanda
Posso supporre che l'IEnumerator
ricevo da un IList
(chiamando il metodo GetEnumerator
dall'interfaccia IEnumerable
) mi darà gli elementi in ordine di lista?
Soluzione
Non è possibile, perché IList è un'interfaccia e un'implementazione può enumerare gli elementi in qualsiasi ordine. Per esempio, potrei implemenent WeirdList: IList, e lo hanno enumerare gli elementi in qualsiasi modo, anche non-deterministico. Se si utilizza un elenco (T) d'altra parte, garantisce per enumerare gli elementi nell'ordine in cui sono memorizzati nella lista.
Modifica : Detto questo, come molti altri fanno notare, la maggior parte delle implementazioni seguiranno la semantica di List (T). Anche se non era quello che hai chiesto;)
Altri suggerimenti
L'enumeratore dovrebbe darvi accesso agli oggetti all'interno della lista relativa alla loro posizione in memoria che sarebbe lo stesso che utilizzare l'indicizzatore della lista che va da 0 a Lunghezza <1 in un ciclo for.
Modifica Ho risposto specificamente per quanto riguarda le classi del framework .NET che implementano IList, dovrebbe qualsiasi altra persona implementare queste interfacce la loro effettiva attuazione potrebbe essere qualsiasi cosa. Quindi dipende da realizzatore.
Sì, lo farà esattamente questo, per qualsiasi implementazione decente di IList
almeno. Un buon IList
dovrebbe sempre enumerare gli elementi nello stesso ordine in cui l'elenco viene indicizzato.
List<int> list = new List<int> { 1, 1, 2, 3, 5, 8 };
IEnumerator<int> enumtor = list.GetEnumerator();
while (enumtor.MoveNext())
{
Console.Write(enumtor.Current);
}
Stampe 112358
.
Questo dipenderà l'attuazione del IList