Myślę, że możesz użyć jednego z nich, ale każdy ma zastosowanie. Zasadniczo List
jest, IEnumerable
ale masz funkcjonalność liczenia, dodawania elementu, usuwania elementu
IEnumerable nie jest wydajne do liczenia elementów
Jeśli kolekcja ma być przeznaczona tylko do odczytu lub modyfikacja kolekcji jest kontrolowana przez, Parent
to zwrócenie „ IList
just for” Count
nie jest dobrym pomysłem.
W Linq istnieje Count()
metoda rozszerzenia, do IEnumerable<T>
której wewnątrz środowiska CLR zostanie skrócony, .Count
jeśli typ bazowy to IList
, więc różnica wydajności jest pomijalna.
Generalnie uważam (opinia), że lepszą praktyką jest zwrócenie IEnumerable tam, gdzie to możliwe, jeśli potrzebujesz dodać te metody, dodaj te metody do klasy nadrzędnej, w przeciwnym razie konsument zarządza kolekcją w ramach Modelu, co narusza zasady, np. manufacturer.Models.Add(model)
Narusza prawo demeter. Oczywiście są to tylko wskazówki, a nie twarde i szybkie zasady, ale dopóki nie zrozumiesz w pełni możliwości ich zastosowania, podążanie na ślepo jest lepsze niż w ogóle.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Uwaga: jeśli używasz nNHibernate, może być konieczne zmapowanie do prywatnego IList przy użyciu różnych akcesorów).