我做节目的时候,有时候我有这个疑问。我一直在使用List<T>
,但我没有使用其他人。
我想知道每个人何时更好地使用,以及在什么情况下使用。
答案 0 :(得分:6)
我相信你可以自己阅读文档。我将在这里做一个简短的总结:
IEnumerable
是一个在集合上公开枚举器的接口。如果希望能够支持迭代,请实现此接口,例如在foreach
循环内。Collection
是IEnumerable
的一个实现(因此你可以迭代它),通常由希望具有类似集合的行为的用户定义类进一步扩展(即使用{{1} },Add
,Remove
等)。它也可以“按原样”使用。Contains
也是List
的一个实现(因此你可以迭代它),它通常用作“原样”作为某种类型对象的容器。在后台使用动态调整数组,它是IEnumerable
。请注意,虽然ArrayList
可以是通用的,也可以是非通用的,IEnumerable
和Collection
只能用作通用类。
答案 1 :(得分:1)
MSDN可以:
答案 2 :(得分:1)
List是可实例化的类型,以线性方式保存项目。 (编辑:我被告知它是用动态数组实现的,而不是链接列表,这只是我的猜测)。
ICollection
/ CollectionBase
和IEnumerable
不是直接可实例化的类型。
CollectionBase
/ ICollection
是一个基类/接口,由任何认为自己是集合并保存多个项的类继承/实现。 CollectionBase
/ ICollection
还允许您在不知道其实现的情况下传递集合。
IEnumerable
也是一个提供迭代集合的方法的接口。 IEnumerable
基本上允许您在集合上使用foreach
循环。您可以直接使用接口方法来获取一些C ++样式的迭代器,但foreach
循环不易出错。
答案 3 :(得分:0)
如果您查看三者的定义(见下文),您会注意到List
实施Enumerable
和ICollection
以及ICollection
实施IEnumerable
。更清楚:
List
是 CLASS ,它可以存储可变数量的相同类型的项目以及其他两个接口指定的功能。
ICollection
是一个接口,它指定了操作集合的通用方法。注意:这是一个接口,因此无法实例化。
IEnumerable
是一个接口,它指定迭代集合的方法。注意:这是一个接口,因此无法实例化。
表示可以通过索引访问的强类型对象列表。提供搜索,排序和操作列表的方法。
public class List<T> : IList<T>, ICollection<T>,
IEnumerable<T>, IList, ICollection, IEnumerable
定义操纵泛型集合的方法。
public interface ICollection<T> : IEnumerable<T>,
IEnumerable
公开枚举器,它支持对指定类型的集合进行简单迭代。
public interface IEnumerable<out T> : IEnumerable