2009-10-07 3 views

risposta

81

Un regolare per ogni farà:

foreach (var item in collection) 
{ 
    // do your stuff 
} 
+0

Questo è più veloce di .ElementAt(). Sfortunatamente, il mio voto è bloccato sulla risposta di Alexa quindi non posso annullarlo ma questa è la migliore risposta. +1 –

5
foreach (var element in instanceOfAClassThatImplelemntIEnumerable) 
{ 

} 
69

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.

+3

Non dimenticare di smaltire l'enumeratore. –

+0

@Eric: Sì, lo aggiungerò perché è facile non vederlo. – Noldorin

+1

+1, l'iterazione manuale può essere utile a volte. –

29

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 :-)

+3

Perché questo ha così tanti voti? Questo enumererà l'enumerabile 2 volte anziché una volta. –

+1

@RomanReiner perché funziona, alcune persone non si preoccupano delle prestazioni :) – Khateeb321

+0

@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