C'est ... quelque chose ... sur lequel vous pouvez boucler. Il peut s'agir d'une liste, d'un tableau ou (presque) de n'importe quoi d'autre qui supporte une fonction foreach
boucle. C'est pour quand vous voulez être capable d'utiliser un objet avec une foreach
mais vous ne savez pas exactement à quel type vous avez affaire, que ce soit un tableau, une liste ou quelque chose de personnalisé.
C'est donc le premier avantage : si vos méthodes acceptent un IEnumerable plutôt qu'un tableau ou une liste, elles deviennent plus puissantes car vous pouvez leur passer plus de types d'objets différents.
Ce qui distingue vraiment IEnumerable, ce sont les blocs d'itérateurs (la fonction yield
en C#). Les blocs itérateurs implémentent l'interface IEnumerable comme une liste ou un tableau, mais ils sont très spéciaux car, contrairement à une liste ou un tableau, ils ne conservent souvent l'état que pour un seul élément à la fois. Ainsi, si vous souhaitez parcourir en boucle les lignes d'un très gros fichier, par exemple, vous pouvez écrire un bloc itérateur pour gérer l'entrée du fichier. Ainsi, vous n'aurez jamais plus d'une ligne du fichier en mémoire à la fois, et si vous terminez la boucle plus tôt (il s'agissait peut-être d'une recherche et vous avez trouvé ce dont vous aviez besoin), vous n'aurez peut-être pas besoin de lire tout le fichier. Ou si vous lisez les résultats d'une grande requête SQL, vous pouvez limiter votre utilisation de la mémoire à un seul enregistrement.
Une autre caractéristique est que cette évaluation est paresseux Ainsi, si vous effectuez un travail compliqué pour évaluer l'énumérable au fur et à mesure que vous le lisez, ce travail n'a pas lieu tant qu'il n'est pas demandé. C'est un avantage supplémentaire, car souvent (par exemple, pour les recherches à nouveau), vous constaterez que vous n'avez pas besoin de faire ce travail du tout.
Vous pouvez penser à IEnumerable comme à une liste juste à temps.
26 votes
Pour être honnête, la définition sur MSDN est très effrayante pour un débutant, quand tout ce que vous voulez faire est un foreach.
11 votes
Bien que je puisse comprendre pourquoi il a été fermé, je suis venu sur ce site depuis Google après que MSDN n'ait pas été très clair, et les réponses m'ont vraiment aidé. Si je le pouvais, je voterais pour la réouverture de ..... Ce sujet apparaît en tête de liste lorsqu'on cherche "What is IEnumerable" sur Google et je suis sûr que d'autres l'ont trouvé utile.