Creo que puedes usar cualquiera, pero cada uno tiene un uso. Básicamente lo List
es, IEnumerable
pero tiene la funcionalidad de contar, agregar elemento, eliminar elemento
IEnumerable no es eficiente para contar elementos
Si la colección está destinada a ser de solo lectura, o la modificación de la colección está controlada por el, Parent
entonces devolver un IList
solo para Count
no es una buena idea.
En Linq, hay un Count()
método de extensión en el IEnumerable<T>
que dentro del CLR se accederá a .Count
si el tipo subyacente es de IList
, por lo que la diferencia de rendimiento es insignificante.
En general, creo (opinión) que es una mejor práctica devolver IEnumerable donde sea posible, si necesita hacer adiciones, agregue estos métodos a la clase principal; de lo contrario, el consumidor administra la colección dentro del Modelo que viola los principios, por ejemplo, manufacturer.Models.Add(model)
viola la ley de demeter. Por supuesto, estas son solo pautas y no reglas estrictas y rápidas, pero hasta que tenga una comprensión completa de la aplicabilidad, es mejor seguir ciegamente que no seguir en absoluto.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Nota: si usa nNHibernate, es posible que deba mapear a IList privada usando diferentes accesadores).