Ich denke, Sie können beide verwenden, aber jeder hat eine Verwendung. Grundsätzlich List
ist IEnumerable
aber 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, Parent
ein IList
Just for zurückzugeben Count
.
In Linq gibt es eine Count()
Erweiterungsmethode, bei IEnumerable<T>
der innerhalb der CLR eine Verknüpfung hergestellt wird, .Count
wenn 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.)