144 votes

IList vs IEnumerable pour les collections sur les entités

Lorsque j'ai des entités dans mon domaine avec des listes de choses, doivent-elles être exposées comme ILists ou IEnumerables ? Par exemple, Order a un tas de OrderLines.

182voto

Matt Hamilton Points 98268

IEnumerable<T> représente une série d'éléments sur lesquels vous pouvez itérer (en utilisant foreach, par exemple), alors que IList<T> est une collection à laquelle vous pouvez ajouter ou retirer des éléments.

Typiquement, vous voudrez être capable de modifier une commande en ajoutant ou en supprimant des lignes de commande, donc vous voudrez probablement que Order.Lines soit un fichier de type IList<OrderLine> .

Cela dit, vous devez prendre certaines décisions concernant la conception du cadre. Par exemple, doit-il être possible d'ajouter la même instance de OrderLine à deux commandes différentes ? Probablement pas. Donc, étant donné que vous souhaitez être en mesure de valider si une OrderLine doit être ajoutée à la commande, vous pouvez en effet vouloir faire apparaître la propriété Lines comme une simple propriété IEnumerable<OrderLine> et fournir des méthodes Add(OrderLine) et Remove(OrderLine) qui peuvent gérer cette validation.

24voto

JoshSchlesinger Points 462

La plupart du temps, je préfère IList à IEnumerable parce que IEnumerable ne dispose pas de la méthode Count et que vous ne pouvez pas accéder à la collection par le biais d'un index (bien que si vous utilisez LINQ, vous pouvez contourner ce problème avec des méthodes d'extension).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X