2008-12-18 87 views

回答

177

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

通常情況下,您希望能夠通過向其添加或刪除OrderLines來修改訂單,因此您可能希望Order.Lines成爲IList<OrderLine>

話雖如此,你應該做一些框架設計決策。例如,是否可以將相同的OrderLine實例添加到兩個不同的訂單中?可能不會。因此,鑑於您希望能夠驗證OrderLine是否應添加到訂單中,您可能確實想要將Lines屬性僅表示爲IEnumerable<OrderLine>,並提供Add(OrderLine)和Remove(OrderLine)方法,它們可以處理驗證。

+4

如果您需要列表已物化,但您不想添加或從中刪除,也可以使用「IReadOnlyList」或「IReadOnlyCollection」。 – julealgon 2015-06-25 15:20:22

22

大多數情況下,我最終會使用IEnumerable使用IList,因爲IEnumerable沒有Count方法,並且您無法通過索引訪問集合(儘管如果您使用的是LINQ,則可以使用擴展方法)。

相關問題