Come eseguire il ciclo di una raccolta che supporta IEnumerable?Come eseguire il ciclo di una raccolta che supporta IEnumerable?
risposta
Un regolare per ogni farà:
foreach (var item in collection)
{
// do your stuff
}
foreach (var element in instanceOfAClassThatImplelemntIEnumerable)
{
}
Insieme con i metodi già suggerito di utilizzare un ciclo foreach
, ho pensato di anche ricordare che qualsiasi oggetto che implementa IEnumerable
fornisce anche una IEnumerator
interfaccia tramite il metodo GetEnumerator
. Sebbene questo metodo di solito non sia necessario, può essere utilizzato per iterare manualmente su raccolte ed è particolarmente utile quando si scrivono i propri metodi di estensione per le raccolte.
IEnumerable<T> mySequence;
using (var sequenceEnum = mySequence.GetEnumerator())
{
while (sequenceEnum.MoveNext())
{
// Do something with sequenceEnum.Current.
}
}
Un primo esempio è quando si vuole iterare due sequenze in concomitanza, che non è possibile con un ciclo foreach
.
Non dimenticare di smaltire l'enumeratore. –
@Eric: Sì, lo aggiungerò perché è facile non vederlo. – Noldorin
+1, l'iterazione manuale può essere utile a volte. –
o anche un classico metodo di moda vecchia
for(int i = 0; i < collection.Count(); i++)
{
string str1 = collection.ElementAt(i);
// do your stuff
}
Forse ti piacerebbe questo metodo anche :-)
Perché questo ha così tanti voti? Questo enumererà l'enumerabile 2 volte anziché una volta. –
@RomanReiner perché funziona, alcune persone non si preoccupano delle prestazioni :) – Khateeb321
@RomanReiner questo è un buon esempio, ho bisogno di assegnare ogni elemento di una raccolta a un'altra raccolta, penso di non poterlo fare usando foreach – AminM
Questo è più veloce di .ElementAt(). Sfortunatamente, il mio voto è bloccato sulla risposta di Alexa quindi non posso annullarlo ma questa è la migliore risposta. +1 –