有人可以告诉我List,Collection和Enumerable之间的区别是什么?

时间:2011-12-21 19:19:37

标签: c# list collections ienumerable enumerable

我做节目的时候,有时候我有这个疑问。我一直在使用List<T>,但我没有使用其他人。

我想知道每个人何时更好地使用,以及在什么情况下使用。

4 个答案:

答案 0 :(得分:6)

我相信你可以自己阅读文档。我将在这里做一个简短的总结:

  1. IEnumerable是一个在集合上公开枚举器的接口。如果希望能够支持迭代,请实现此接口,例如在foreach循环内。
  2. CollectionIEnumerable的一个实现(因此你可以迭代它),通常由希望具有类似集合的行为的用户定义类进一步扩展(即使用{{1} },AddRemove等)。它也可以“按原样”使用。
  3. Contains也是List的一个实现(因此你可以迭代它),它通常用作“原样”作为某种类型对象的容器。在后台使用动态调整数组,它是IEnumerable
  4. 的通用等价物

    请注意,虽然ArrayList可以是通用的,也可以是非通用的,IEnumerableCollection只能用作通用类。

答案 1 :(得分:1)

答案 2 :(得分:1)

List是可实例化的类型,以线性方式保存项目。 (编辑:我被告知它是用动态数组实现的,而不是链接列表,这只是我的猜测)。

ICollection / CollectionBaseIEnumerable不是直接可实例化的类型。

CollectionBase / ICollection是一个基类/接口,由任何认为自己是集合并保存多个项的类继承/实现。 CollectionBase / ICollection还允许您在不知道其实现的情况下传递集合。

IEnumerable也是一个提供迭代集合的方法的接口。 IEnumerable基本上允许您在集合上使用foreach循环。您可以直接使用接口方法来获取一些C ++样式的迭代器,但foreach循环不易出错。

答案 3 :(得分:0)

如果您查看三者的定义(见下文),您会注意到List实施EnumerableICollection以及ICollection实施IEnumerable。更清楚:

List CLASS ,它可以存储可变数量的相同类型的项目以及其他两个接口指定的功能。

ICollection是一个接口,它指定了操作集合的通用方法。注意:这是一个接口,因此无法实例化。

IEnumerable是一个接口,它指定迭代集合的方法。注意:这是一个接口,因此无法实例化。

List

表示可以通过索引访问的强类型对象列表。提供搜索,排序和操作列表的方法。

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