繁体   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