2013-07-03 11 views
34

Leggendo post simili ho appreso che un elenco è un tipo di IEnumerable. Ma mi chiedo davvero quale sia la differenza pratica tra questi due.Differenza pratica tra Elenco e IEnumerable

A qualcuno che da sempre hanno utilizzato un elenco e mai usato IEnumerable:

  • Qual è la differenza pratica tra i due?
  • In quali scenari uno è meglio dell'altro?

Ecco un esempio pratico: Vogliamo memorizzare quattro corde, ordinarli in ordine alfabetico, passarle a un'altra funzione e poi mostrare all'utente il risultato. Cosa dovremmo usare e perché?

Speriamo che qualcuno possa sistemare questo per me o indicarmi la giusta direzione. Grazie in anticipo!

+2

Un 'Elenco' non è un tipo di' IEnumerable' rispetta il contratto che 'IEnumerable' indica (vale a dire che può essere utilizzato come' IEnumerable'). Se vuoi memorizzare le stringhe, utilizzeresti una lista. Non è possibile utilizzare un enumerable in quanto non è una classe. Potresti accedere all'elenco come enumerabile se lo desideri. –

+6

Questo non dovrebbe essere contrassegnato come una domanda duplicata. L'altra domanda parla di IEnumberable vs List quando si utilizza LINQ. Questa domanda non riguarda LINQ. – JMS10

risposta

114

Una differenza importante tra IEnumerable e List (oltre a essere un'interfaccia e l'altra è una classe concreta) è che IEnumerable è di sola lettura e List non lo è.

Quindi, se è necessario la possibilità di apportare modifiche permanenti di qualsiasi tipo alla propria raccolta (aggiungere & rimuovere), è necessario Elenco. Se hai solo bisogno di leggere, ordinare e/o filtrare la tua collezione, IEnumerable è sufficiente a tale scopo.

Quindi nel tuo esempio pratico, se si desidera aggiungere le quattro stringhe una alla volta, è necessario Elenco. Ma se stessimo istanziando la tua collezione tutto in una volta, potresti usare IEnumerable.

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

È quindi possibile utilizzare LINQ per filtrare o ordinare l'elenco come desiderato.

+22

"IEnumerable è di sola lettura e List non lo è." Finalmente una risposta concreta che ti dà un'idea generale della differenza. Grazie mille :) – Robin

+1

Perfetto !! Bella e semplice risposta –

+1

Ci sono altre cose interessanti che puoi fare con IEnumerable che non puoi fare con una lista. Controlla la parola chiave yield. https://www.kenneth-truyers.net/2016/05/12/yield-return-in-c/ – Kevin

10

Molti tipi diversi da Elenco implementano IEnumerable come ArrayList. Quindi un vantaggio è che puoi passare diversi tipi di raccolta alla stessa funzione.