當我在我的域中有事物列表的東西時,它們是否應該作爲IList或IEnumerables公開?例如。訂單有一堆OrderLines。IList vs IEnumerable for Collections on Entities
136
A
回答
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,則可以使用擴展方法)。
相關問題
- 1. @XmlElementWrapper for unwrapped collections
- 2. ValidationAttribute for IEnumerable Property
- 3. XmlSerializer - IEnumerable或IList作爲LIst
- 4. C#-Geneics -ISerializable,IEnumerable,IList -efficient application
- 5. 將IList投射到IEnumerable
- 6. confused about linq和IEnumerable或IList
- 7. IEnumerable到IList鑄造Possiblelites
- 8. IEnumerable <>到IList <>
- 9. IList vs IEnumerable:當他們「執行」LINQ查詢?
- 10. 的IEnumerable VS IList的和奇怪的CrossThreadMessagingException調試
- 11. IEnumerable vs List
- 12. EF ICollection Vs List Vs IEnumerable Vs IQueryable
- 13. IList <string>傳遞給IEnumerable參數
- 14. C#使用.ToList()將IEnumerable轉換爲IList?
- 15. 爲什麼ArrayList實現IList,ICollection,IEnumerable?
- 16. 我應該怎樣使用IEnumerable或IList?
- 17. 爲什麼在IEnumerable上使用IList?
- 18. List,IList和IEnumerable之間的比較
- 19. C#列出IList或IEnumerable作爲參數
- 20. Ruby on Rails vs ASP.NET MVC 3 for .NET Guy?
- 21. 返回IEnumerable的問題<T>/IList <T>
- 22. 有沒有像ForEach for IList的方法?
- 23. IList <T> vs IEnumerable <T>:爲什麼此作業無效?
- 24. 的IList <mutable_struct> VS mutable_struct []
- 25. 使用IEnumerable與ICollection與IList的自定義集合
- 26. IEnumerable vs List迭代集合
- 27. 在NHibernate中使用IList,IEnumerable,ISet或ICollection有什麼區別?
- 28. 爲什麼IList的<T>繼承了IEnumerable <T>和IEnumerable再次
- 29. Outlet Collections
- 30. DataTables vs IEnumerable <T>
實施兩者是明智的嗎? – PedroC88 2010-10-12 04:47:06
它不會。 IList從IEnumerable繼承。 – Unknown1987 2014-06-08 00:41:46