Différence pratique entre List et IEnumerable]

cette question a déjà une réponse ici:

  • IEnumerable vs la Liste de Ce qu'il faut Utiliser? Comment fonctionnent-ils? 9 réponses

en lisant des billets similaires, j'ai appris qu'une liste est une sorte de IEnumerable. Mais je suis vraiment demandez quelle est la différence pratique entre les deux en fait être.

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

  • Quelle est la différence pratique entre les deux?
  • Dans les scénarios de l'un d'eux est meilleur que l'autre?

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

J'espère que quelqu'un pourra régler ça pour moi ou me pointer dans la bonne direction. Merci à l'avance!

41
demandé sur Robin 2013-07-03 17:04:23

2 réponses

une différence importante entre IEnumerable et List (en plus d'être une interface et l'autre étant une classe concrète) est que IEnumerable est en lecture seule et List ne l'est pas.

donc si vous avez besoin de la capacité d'apporter des changements permanents de quelque nature que ce soit à votre collection (ajouter et supprimer), vous aurez besoin de liste. Si vous avez juste besoin de lire, trier et/ou filtrer votre collection, IEnumerable est suffisant à cet effet.

ainsi dans votre exemple pratique, si vous voulez ajouter les quatre cordes une à la fois, vous avez besoin de liste. Mais si vous instanciez votre collection d'un seul coup, vous pourriez utiliser IEnumerable.

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

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

136
répondu Scott Lawrence 2013-07-03 13:15:24

beaucoup de types autres que List implémentent IEnumerable tel Qu'un ArrayList. Donc un avantage est que vous pouvez passer différents types de collecte à la même fonction.

12
répondu DasDave 2013-07-03 13:07:05