2017-10-20 56 views
1

Si je veux prendre une liste comme un argument d'une méthode, Resharper donne un indice que l'utilisation de l'interface IList pourrait être une meilleure idée. Si je remplace alors List avec IList, Resharper suggère IEnumerable. En Java, je prendrais aussi l'interface List et non ArrayList comme argument. Mais est-ce vraiment un bon code pour utiliser iEnumerable comme argument? Est-ce une bonne pratique d'utiliser IEnumerable si aucune fonctionnalité de IList ou List n'est requise?C# Liste IList ou IEnumerable comme argument

+1

* "Est-ce une bonne pratique d'utiliser IEnumerable si aucune fonctionnalité de IList ou List n'est requise?" * - Oui. –

+0

Oui, car il ouvre ce que vous pouvez passer comme un tableau ou une requête Linq chargé paresseux. – juharr

+0

Il est toujours bon de fournir des méthodes réutilisables. Si vous demandez l'interface de base de toutes les collections génériques, vous pouvez utiliser cette méthode avec plusieurs types, pas seulement avec des listes. 'IList ' couvre les listes et les tableaux, mais si vous n'avez pas besoin des méthodes de 'IList ' vous pouvez utiliser 'IEnumerable '. –

Répondre

5

Voici the article qui m'a fait changer d'avis sur tout cela et m'a fait commencer à suivre le principe de

prendre le type le plus générique, le retour le type le plus spécifique

Donc, pour répondre votre question

Est-ce une bonne pratique d'utiliser IEnumerable si aucune fonctionnalité de IList ou List n'est requise?

oui, il est

Note: ne pas le faire! J'ai vu le code qui a accepté un IEnumerable, puis a lancé une exception si le paramètre n'était pas List. C'est stupide. La phrase que je cite ci-dessus signifie "ne pas demander plus de spécificité que nécessaire"