ฉันคิดว่าคุณสามารถใช้อย่างใดอย่างหนึ่ง แต่แต่ละคนมีประโยชน์ โดยทั่วไปListเป็นIEnumerableแต่คุณต้องนับการทำงานองค์ประกอบเพิ่มองค์ประกอบลบ
IEnumerable ไม่มีประสิทธิภาพในการนับองค์ประกอบ
หากคอลเลกชันมีวัตถุประสงค์เพื่ออ่านอย่างเดียวหรือการปรับเปลี่ยนคอลเล็กชันถูกควบคุมโดยการParentส่งคืนIListjust for Countนั้นไม่ใช่ความคิดที่ดี
ใน Linq มีCount()วิธีการขยายIEnumerable<T>ซึ่งภายใน CLR จะลัดไปยัง.Countประเภทที่อยู่ภายใต้IListดังนั้นความแตกต่างของประสิทธิภาพจึงไม่สำคัญ
โดยทั่วไปแล้วฉันรู้สึกว่า (ความเห็น) เป็นแนวทางปฏิบัติที่ดีกว่าในการส่งคืน IEnumerable หากเป็นไปได้หากคุณจำเป็นต้องทำการเพิ่มเติมจากนั้นเพิ่มวิธีการเหล่านี้ไปยังคลาสหลักมิฉะนั้นผู้บริโภคจะจัดการคอลเล็กชันภายใน Model ที่ละเมิดหลักการเช่นmanufacturer.Models.Add(model)ละเมิดกฎหมายของ demeter. แน่นอนว่านี่เป็นเพียงแนวทางและไม่ใช่กฎที่ยากและรวดเร็ว แต่จนกว่าคุณจะเข้าใจถึงการบังคับใช้อย่างเต็มที่การทำตามแบบสุ่มสี่สุ่มห้าจะดีกว่าการไม่ปฏิบัติตามเลย
public interface IManufacturer
{
IEnumerable<Model> Models {get;}
void AddModel(Model model);
}
(หมายเหตุ: หากใช้ nNHibernate คุณอาจต้องแมปกับ IList ส่วนตัวโดยใช้ตัวเข้าถึงอื่น)