2010-07-12 9 views

risposta

37

In generale, si dovrebbe cercare di utilizzare il tipo meno specifica che soddisfa il vostro scopo. IEnumerable è meno specifico di IList (IList implementa IEnumerable) quindi, a meno che tu non voglia qualcosa di specifico da IList (come .Count come suggerisci, o magari Aggiungi, Elimina, ecc.), Userei IEnumerable.

Su alcune delle belle aggiunte ottenute da IEnumerable è possibile scrivere metodi di iteratore per restituire questo tipo (cercare "rendimento restituito" e metodi iteratore se non si ha familiarità con essi). Questo ti permette di scrivere "pipeline" molto efficienti per i tuoi loop.

+2

Sono d'accordo con l'utilizzo del tipo meno derivato. ICollection <> è sufficiente per la maggior parte di aggiunta/rimozione. –

+0

@ Mark H - buon punto - per la maggior parte delle operazioni di aggiunta/rimozione, anche IList è inutilmente specifico. –

+0

IList * implementa * IEnumerable ?! –

3

si dovrebbe usare IList quando è necessario l'accesso da parte di indice alla vostra collezione, aggiungere ed eliminare elementi, ecc, e IEnumerable quando è necessario solo enumerare sopra la vostra collezione.

Una risposta molto semplice, la posso estendere se descrivete lo scenario.