collections - 实体集合的 IList 与 IEnumerable

标签 collections ienumerable ilist

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

最佳答案

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

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

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

关于collections - 实体集合的 IList 与 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376708/

相关文章:

c# - 为什么使用 SomethingCollection 而不是 Collection<Something>?

c# - 有没有办法在一个 Console.Write(line) 中写入整个 IEnumerable<T>?

c# - C# 泛型列表中的数组协方差

Magento 自定义集合打破分页

java - 在 List 中转换/分组值

c# - 这是 AutoMapper 2.0.0 和 2.2.0 之间的重大变化吗?

c# - DataGridView 过滤

asp.net - 我应该将 IList 或 List 返回到 MVC 中的 Controller 吗?

java - Java 的侵入式列表实现?

recursion - 如何在 Kotlin 中使用 FoldRight 递归实现 dropWhile