148

当我的域中有包含事物列表的实体时,它们应该公开为 ILists 还是 IEnumerables?例如 Order 有一堆 OrderLines。

4

2 回答 2

185

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

通常,您希望能够通过添加或删除 OrderLines 来修改 Order,因此您可能希望 Order.Lines 为IList<OrderLine>.

话虽如此,您应该做出一些框架设计决策。例如,是否可以将相同的 OrderLine 实例添加到两个不同的订单?可能不是。因此,鉴于您希望能够验证是否应将 OrderLine 添加到订单中,您可能确实希望将 Lines 属性显示为仅一个IEnumerable<OrderLine>,并提供可以处理的 Add(OrderLine) 和 Remove(OrderLine) 方法那个验证。

于 2008-12-18T02:27:07.173 回答
25

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

于 2009-09-14T04:19:18.343 回答