web-dev-qa-db-fra.com

Différence pratique entre List et IEnumerable

En lisant des articles similaires, j'ai appris qu'une liste est un type de IEnumerable. Mais je me demande vraiment quelle est la différence pratique entre ces deux-là.

Pour quelqu'un qui a toujours utilisé une liste et qui n'a jamais utilisé IEnumerable:

  • Quelle est la différence pratique entre les deux?
  • Dans quels scénarios l'un est-il meilleur que l'autre?

Voici un exemple pratique: Nous voulons stocker quatre chaînes, les classer par ordre alphabétique, les transmettre à une autre fonction et ensuite montrer le résultat à l'utilisateur. Que devrions-nous utiliser et pourquoi?

J'espère que quelqu'un pourra résoudre ce problème pour moi ou me diriger dans la bonne direction. Merci d'avance!

58
Robin

Une différence importante entre IEnumerable et List (à part l’un étant une interface et l’autre une classe concrète) est que IEnumerable est en lecture seule et que List ne l’est pas.

Donc, si vous avez besoin de la possibilité d’apporter des modifications permanentes à votre collection (ajout et suppression), vous aurez besoin de la liste. Si vous avez juste besoin de lire, trier et/ou filtrer votre collection, IEnumerable est suffisant pour cela.

Ainsi, dans votre exemple pratique, si vous souhaitez ajouter les quatre chaînes une à la fois, vous avez besoin de la liste. Mais si vous instanciez votre collection en une fois, vous pouvez utiliser IEnumerable.

IEnumerable firstFourLettersOfAlphabet = new[]{"a","b","c","d"};

Vous pouvez ensuite utiliser LINQ pour filtrer ou trier la liste comme vous le souhaitez.

165
Scott Lawrence

De nombreux types autres que List implémentent IEnumerable tel qu'un ArrayList. Donc, un avantage est que vous pouvez transmettre différents types de collection à la même fonction.

13
DasDave