Gdy mam jednostki w mojej domenie z listami rzeczy, czy powinny one być ujawniane jako ILists czy IEnumerables? Np. Order ma kilka OrderLines.
collections
ienumerable
ilist
stawermatyczny
źródło
źródło
Odpowiedzi:
IEnumerable<T>
reprezentuje serię elementów, które możesz iterować (na przykład używając foreach), podczas gdyIList<T>
jest to kolekcja, do której możesz dodawać lub usuwać.Zazwyczaj będziesz chciał móc modyfikować zamówienie, dodając lub usuwając do niego OrderLines, więc prawdopodobnie chcesz, aby Order.Lines był plikiem
IList<OrderLine>
.Mimo to należy podjąć pewne decyzje dotyczące projektowania ram. Na przykład, czy powinno być możliwe dodanie tego samego wystąpienia OrderLine do dwóch różnych zamówień? Prawdopodobnie nie. Biorąc więc pod uwagę, że chcesz mieć możliwość sprawdzenia, czy OrderLine należy dodać do zamówienia, możesz rzeczywiście chcieć wyświetlić właściwość Lines jako jedyną
IEnumerable<OrderLine>
i udostępnić metody Add (OrderLine) i Remove (OrderLine), które mogą obsługiwać ta walidacja.źródło
IReadOnlyList
lub,IReadOnlyCollection
jeśli potrzebujesz zmaterializowanej listy, ale nie chcesz jej dodawać ani usuwać.IReadOnlyList
nie ma sensu.W większości przypadków korzystam z IList przez IEnumerable, ponieważ IEnumerable nie ma metody Count i nie można uzyskać dostępu do kolekcji za pośrednictwem indeksu (chociaż jeśli używasz LINQ, możesz obejść to za pomocą metod rozszerzających).
źródło
ElementAt
metodą?