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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top