[英]Comparison between List, IList, and IEnumerable
IEnumerable<T>
是以下擴展或實現的基接口。 它不允許直接訪問,只讀。 因此,只有在您打算迭代集合時才使用它。
ICollection<T>
擴展了IEnumerable<T>
但另外允許添加,刪除,測試集合中是否存在元素並獲取元素總數。 它不允許通過索引直接訪問元素。 這將是一個O(n)操作,因為您需要開始迭代它,直到找到相應的元素。
IList<T>
擴展ICollection<T>
(因此它繼承了它的所有屬性),但另外允許通過索引直接訪問元素。 這是O(1)操作。
List<T>
只是IList<T>
接口的具體實現。
在您的代碼中,您應始終公開對象層次結構中最高的類型,該類型將與調用者的需求相對應。 因此,例如,如果調用者只想枚舉數據集,請使用IEnumerable<T>
。 如果他們需要通過索引直接訪問元素,則公開IList<T>
。
List<T>
只能在代碼內部使用,但通常不會出現在您公開的方法的簽名中。 這為您提供了更大的靈活性,因為您可以輕松地交換具體實施而不會違反合同。
IList的
IList存在於System.Collections命名空間中。
IList用於訪問列表中特定位置/索引中的元素。
與IEnumerable一樣,IList也最好從內存集合中查詢數據,如List,Array等。
當您想要從列表中添加或刪除項目時,IList非常有用。
IList可以在不迭代集合的情況下找出集合中的元素。
IList支持延遲執行。
IList不支持進一步過濾。
IEnumerable的
System.Collections命名空間中存在IEnumerable。
IEnumerable是一個前向集合,它不能向后移動和項目之間。
IEnumerable最好從內存集合中查詢數據,如List,Array等。
IEnumerable不支持在列表中添加或刪除項目。
使用Ienumerable,我們可以在迭代集合后找出集合中的元素。
IEnumerable支持延遲執行。
IEnumerable支持進一步過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.