簡體   English   中英

List,IList和IEnumerable之間的比較

[英]Comparison between List, IList, and IEnumerable

我有一個C#應用程序,我在其中處理一些集合類型。 我需要知道這些類型之間的區別是什么:

  1. List
  2. IList
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM