Ich denke, Sie können beide verwenden, aber jeder hat eine Verwendung. Grundsätzlich Listist IEnumerableaber Sie haben Zählfunktion, Element hinzufügen, Element entfernen
IEnumerable ist zum Zählen von Elementen nicht effizient
Wenn die Sammlung schreibgeschützt sein soll oder die Änderung der Sammlung von der gesteuert wird, ist es keine gute Idee, Parentein IListJust for zurückzugeben Count.
In Linq gibt es eine Count()Erweiterungsmethode, bei IEnumerable<T>der innerhalb der CLR eine Verknüpfung hergestellt wird, .Countwenn der zugrunde liegende Typ vorliegt IList, sodass der Leistungsunterschied vernachlässigbar ist.
Im Allgemeinen halte ich es für eine bessere Praxis, IEnumerable zurückzugeben, wenn dies erforderlich ist. Wenn Sie Ergänzungen vornehmen müssen, fügen Sie diese Methoden der übergeordneten Klasse hinzu. Andernfalls verwaltet der Verbraucher die Sammlung innerhalb von Model, was gegen die Prinzipien manufacturer.Models.Add(model)verstößt , z. B. gegen das Gesetz von demeter. Natürlich sind dies nur Richtlinien und keine festen Regeln, aber bis Sie die Anwendbarkeit vollständig verstanden haben, ist es besser, blind zu folgen, als überhaupt nicht zu folgen.
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(Hinweis: Wenn Sie nNHibernate verwenden, müssen Sie möglicherweise eine private IList mit verschiedenen Accessoren zuordnen.)