Я думаю, ви можете використовувати будь-яку, але кожна має свою користь. В основному Listце так, IEnumerableале у вас є функція підрахунку, додавання елемента, видалення елемента
IEnumerable не є ефективним для підрахунку елементів
Якщо колекція призначена лише для читання, або модифікація колекції контролюється Parentтоді поверненням IListпросто для Countне є хорошою ідеєю.
У Linq існує Count()метод розширення, для IEnumerable<T>якого всередині CLR буде ярлик, .Countякщо базовий тип має IList, тож різниця в продуктивності незначна.
Як правило, я вважаю (думка), що кращою практикою є повернення IEnumerable, де це можливо, якщо вам потрібно зробити доповнення, то додайте ці методи до батьківського класу, інакше споживач керує колекцією в рамках Моделі, що порушує принципи, наприклад, manufacturer.Models.Add(model)порушує закон деметер. Звичайно, це лише рекомендації, а не жорсткі правила, але поки ви не зрозумієте застосовності, сліпо слідувати краще, ніж взагалі не дотримуватися.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Примітка: Якщо ви використовуєте nNHibernate, можливо, вам доведеться зіставити приватний IList, використовуючи різні засоби доступу.)