簡體   English   中英

有人可以告訴我List,Collection和Enumerable之間的區別是什么?

[英]Someone can tell me what's the difference between List, Collection and Enumerable?

當我做一個程序時,有時候我有這個疑問。 我一直在使用List<T>但我還沒有使用其他的。

我想知道每個人何時更好地使用,以及在什么情況下。

我相信你可以自己閱讀文檔。 我在這里給出一個簡短的總結:

  1. IEnumerable是一個在集合上公開枚舉器的接口。 如果希望能夠支持迭代,則實現此接口,例如在foreach循環內部。
  2. CollectionIEnumerable一個實現(因此你可以迭代它),它通常由想要具有類似集合的行為的用戶定義類進一步擴展(即使用AddRemoveContains等)。 它也可以“按原樣”使用。
  3. List也是IEnumerable一個實現(因此你可以迭代它),它通常用作“原樣”作為某種類型對象的容器。 在后台使用動態調整數組,並且是ArrayList的通用等價物。

請注意,雖然IEnumerable可以是通用的也可以是非泛型的,但CollectionList只能用作泛型類。

List是可實例化的類型,以線性方式保存項目。 (編輯:我被告知它是用動態數組實現的,而不是鏈接列表,這只是我的猜測)。

ICollection / CollectionBaseIEnumerable不是直接可實例化的類型。

CollectionBase / ICollection是一個基類/接口,由任何認為自己是集合並保存多個項的類繼承/實現。 CollectionBase / ICollection還允許您在不知道其實現的情況下傳遞集合。

IEnumerable也是一個提供迭代集合的方法的接口。 IEnumerable基本上允許你在集合上使用foreach循環。 您可以直接使用接口方法來獲取一些C ++樣式的迭代器,但是foreach循環不容易出錯。

如果查看三者的定義(見下文),您會注意到List實現了EnumerableICollectionICollection實現了IEnumerable 更清楚:

ListCLASS ,它可以存儲可變數量的相同類型的項目以及其他兩個接口指定的功能。

ICollection是一個接口,它指定了操作集合的通用方法。 注意:這是一個接口,因此無法實例化。

IEnumerable是一個接口,它指定迭代集合的方法。 注意:這是一個接口,因此無法實例化。

名單

表示可以通過索引訪問的強類型對象列表。 提供搜索,排序和操作列表的方法。

public class List<T> : IList<T>, ICollection<T>, 
IEnumerable<T>, IList, ICollection, IEnumerable

ICollection的

定義操作泛型集合的方法。

public interface ICollection<T> : IEnumerable<T>, 
IEnumerable

IEnumerable的

公開枚舉器,它支持對指定類型的集合進行簡單迭代。

public interface IEnumerable<out T> : IEnumerable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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