IList vs IEnumerable实体集合

IList vs IEnumerable for Collections on Entities

当我的域中有实体具有事物列表时,它们应该作为IList或IEnumerable公开吗?例如,订单有一堆订单行。


IEnumerable表示一系列可以迭代的项(例如,使用foreach),而IList是可以添加到其中或从中删除的集合。

通常,您希望能够通过向订单添加或删除订单行来修改订单,因此您可能希望订单行是一个IList

尽管如此,您应该做出一些框架设计决策。例如,是否可以将同一个订单行实例添加到两个不同的订单中?大概不会。因此,考虑到您希望能够验证是否应将医嘱行添加到订单中,您可能确实希望将Lines属性表示为仅IEnumerable,并提供可以处理该验证的添加(orderline)和删除(orderline)方法。


大多数情况下,我最终使用的是IList而不是IEnumerable,因为IEnumerable没有count方法,并且您无法通过索引访问集合(尽管如果您使用的是LINQ,则可以使用扩展方法来解决此问题)。