Comment faire une boucle dans une collection qui prend en charge IEnumerable?Comment faire une boucle dans une collection qui prend en charge IEnumerable?
Répondre
Un régulière pour chaque fera:
foreach (var item in collection)
{
// do your stuff
}
foreach (var element in instanceOfAClassThatImplelemntIEnumerable)
{
}
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
.
Ne pas oublier de disposer de l'énumérateur. –
@Eric: Oui, je vais ajouter ça car c'est facile à manquer. – Noldorin
+1, l'itération manuelle peut parfois être utile. –
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 :-)
Pourquoi cela a-t-il autant de votes upvotes? Cela énumérera l'énumérable 2n fois au lieu d'une fois. –
@RomanReiner parce que cela fonctionne, certaines personnes ne se soucient pas de la performance :) – Khateeb321
@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
- 1. ROWLEX prend-il en charge nativement IEnumerable <>?
- 2. C# .NET en passant une collection d'objets InterfaceImplementingClass à une routine qui prend une collection d'objets Interface
- 3. Une classe qui implémente une interface qui prend un ENUM
- 4. Comment faire une boucle dans un tableau en Java?
- 5. Castle IoC - ISubDependencyResolver qui prend en charge la libération (...)?
- 6. Comment faire une boucle sur une chaîne multiligne dans Ruby?
- 7. IE prend en charge JQuery
- 8. Comment faire une boucle de tuyau en bash
- 9. Vous cherchez Windows Text Editor qui prend en charge GIT
- 10. Comment faire une boucle sur plusieurs baies?
- 11. Existe-t-il une alternative Visual Library à wxPython qui prend en charge CSS/Style Sheets?
- 12. Comment faire une boucle dans une table et transformer des lignes en objets en utilisant nokogiri
- 13. Comment faire une boucle repeat-until en C++?
- 14. Comment faire une boucle de tableau plus rapide en PHP
- 15. briser une requête <int> IEnumerable qui utilise Enumerable.Range
- 16. En cliquant une fois sur le déploiement, comment prend-il en charge le profil client?
- 17. Comment écrire une méthode qui prend une adresse pour un pointeur en tant que paramètre?
- 18. StructureMap, constructeur qui prend une liste de plugins
- 19. Je suis en train d'apprendre comment lier une collection LINQ IEnumerable à un répéteur
- 20. C# DbCommand dans une boucle
- 21. La suppression de plusieurs éléments dans une collection liée à un datagridview prend une éternité
- 22. Est-ce que l'API NHibernate Criteria prend en charge les projections sur les propriétés de collection?
- 23. Comment coder une fourmi Task qui prend un Mapper arbitraire?
- 24. SQLite prend-il en charge SCOPE_IDENTITY?
- 25. en utilisant une boucle dans un gabarit
- 26. PowerShell prend-il en charge OOP?
- 27. Comment faire une boucle sur les résultats de MySQL facilement?
- 28. Will Access prend en charge 35 à 40 utilisateurs écrivant dans une base de données Access
- 29. iPhone ASIHTTPRequest prend en charge https?
- 30. requête SQL: Comment faire une boucle avec des données similaires
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 –