2009-10-07 8 views

Répondre

81

Un régulière pour chaque fera:

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

C'est plus rapide que .ElementAt(). Malheureusement, mon vote est bloqué sur la réponse d'Alexa, donc je ne peux pas l'annuler mais c'est la meilleure réponse. +1 –

5
foreach (var element in instanceOfAClassThatImplelemntIEnumerable) 
{ 

} 
69

Avec les méthodes déjà proposées à l'utilisation d'une boucle foreach, je pensais que je vous signale également que tout objet qui implémente IEnumerable fournit également un IEnumerator interface via la méthode GetEnumerator. Bien que cette méthode ne soit généralement pas nécessaire, elle peut être utilisée pour l'itération manuelle des collections et est particulièrement utile lors de l'écriture de vos propres méthodes d'extension pour les collections.

IEnumerable<T> mySequence; 
using (var sequenceEnum = mySequence.GetEnumerator()) 
{ 
    while (sequenceEnum.MoveNext()) 
    { 
     // Do something with sequenceEnum.Current. 
    } 
} 

Un premier exemple est lorsque vous voulez itérer sur deux séquences en même temps, ce qui est impossible avec une boucle foreach.

+3

Ne pas oublier de disposer de l'énumérateur. –

+0

@Eric: Oui, je vais ajouter ça car c'est facile à manquer. – Noldorin

+1

+1, l'itération manuelle peut parfois être utile. –

29

ou même une ancienne méthode de mode très classique

for(int i = 0; i < collection.Count(); i++) 
{ 
    string str1 = collection.ElementAt(i); 
    // do your stuff 
} 

peut-être vous voudrais cette méthode aussi :-)

+3

Pourquoi cela a-t-il autant de votes upvotes? Cela énumérera l'énumérable 2n fois au lieu d'une fois. –

+1

@RomanReiner parce que cela fonctionne, certaines personnes ne se soucient pas de la performance :) – Khateeb321

+0

@RomanReiner c'est un bon exemple, je dois attribuer chaque élément d'une collection à une autre collection, je pense que je ne peux pas le faire en utilisant foreach – AminM

Questions connexes