webentwicklung-frage-antwort-db.com.de

IList vs IEnumerable für Entitätssammlungen

Wenn ich Entitäten in meiner Domäne mit Listen von Dingen habe, sollten sie als ILists oder IEnumerables verfügbar gemacht werden? Z.B. Order hat eine Reihe von OrderLines.

145
pondermatic

IEnumerable<T> repräsentiert eine Reihe von Elementen, die Sie durchlaufen können (z. B. mit foreach), während IList<T> eine Sammlung ist, die Sie selbst erstellen kann hinzufügen oder entfernen aus.

Normalerweise möchten Sie in der Lage sein, einen Auftrag zu ändern, indem Sie ihm OrderLines hinzufügen oder entfernen. Daher möchten Sie wahrscheinlich, dass Order.Lines ein IList<OrderLine> Ist.

Dennoch sollten Sie einige Entscheidungen zum Framework-Design treffen. Soll es beispielsweise möglich sein, dieselbe Instanz von OrderLine zwei verschiedenen Aufträgen hinzuzufügen? Wahrscheinlich nicht. Wenn Sie also in der Lage sein möchten, zu überprüfen, ob ein OrderLine zur Bestellung hinzugefügt werden soll, möchten Sie die Lines-Eigenschaft in der Tat nur als IEnumerable<OrderLine> Anzeigen und Add (OrderLine) und Remove ( OrderLine) -Methoden, die diese Validierung verarbeiten können.

182
Matt Hamilton

Die meiste Zeit arbeite ich mit IList über IEnumerable, weil IEnumerable nicht über die Count-Methode verfügt und Sie nicht über einen Index auf die Auflistung zugreifen können (obwohl Sie dies mit Erweiterungsmethoden umgehen können, wenn Sie LINQ verwenden).

24
JoshSchlesinger