Myślę, że możesz użyć jednego z nich, ale każdy ma zastosowanie. Zasadniczo Listjest, IEnumerableale 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, Parentto zwrócenie „ IListjust for” Countnie jest dobrym pomysłem.
W Linq istnieje Count()metoda rozszerzenia, do IEnumerable<T>której wewnątrz środowiska CLR zostanie skrócony, .Countjeś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).