虽然我做了一个程序,但有时候我有这个疑问。我一直在使用List<T>
,但我没有使用其他的。有人可以告诉我List,Collection和Enumerable有什么区别?
我想知道什么时候每一个更好使用,以及在什么情况下。
虽然我做了一个程序,但有时候我有这个疑问。我一直在使用List<T>
,但我没有使用其他的。有人可以告诉我List,Collection和Enumerable有什么区别?
我想知道什么时候每一个更好使用,以及在什么情况下。
我确定你可以自己阅读文档。我在这里给一个简短的总结:
IEnumerable
是暴露在集合的枚举的接口。如果希望能够支持迭代,例如在foreach
循环内实现此接口。Collection
是IEnumerable
实现(因此可以在其上进行迭代),其通常进一步由希望有收集样行为(即使用Add
,Remove
,Contains
等)用户定义的类延长。它也可以“按原样”使用。List
也是IEnumerable
的一个实现(因此你可以遍历它),它通常被用来作为某种类型对象的容器。在后台使用动态调整阵列,并且是ArrayList
的通用等效项。请注意,虽然IEnumerable
既可以是通用和非通用,Collection
和List
只能使用泛型类。
MSDN可以:
列表是保持以线性方式项实例化的类型。 (编辑:我被告知它使用动态数组实现,而不是使用链接列表,这只是我的猜测)。
ICollection
/CollectionBase
和IEnumerable
不是直接实例化类型。
CollectionBase
/ICollection
是继承/由认为自己是收集和保持多个项目的任何类实现的基类/接口。 CollectionBase
/ICollection
也允许你传递集合而不知道它们的实现。
IEnumerable
也是一个接口,提供迭代集合的方法。 IEnumerable
基本上可让您在集合上使用foreach
循环。您可以直接使用接口方法来获取一些C++样式迭代器,但是foreach
循环不太容易出错。
名单使用动态数组,而不是链接列表。 – Tudor 2011-12-21 19:25:59
@Digitlworld:在微软CLR团队的奇异世界,列表实际上没有列出了CS的感觉:后备存储两个'SCG.List
在C#领域,我的理解是接口,抽象类和普通类都是'Type'类型。它们定义的基于反射的实例都是'Type'的可接受值。 – digitlworld 2011-12-21 19:32:44
如果你看三国的定义(见下文),你会发现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
查看文档。 – SLaks 2011-12-21 19:21:41
取决于你想要什么也做列表泛型是创建或确保东西类型的具体名单真棒方式也是一个集合,但如果你想枚举通的东西,你必须非常设计自己枚举(计数器)的IEnumerable 将是一件好事..但随后有还的foreach和for循环,它只是取决于你想要做什么和如何快速您想要它做尼古拉斯发布了一些伟大的链接来解释它最好的.. –
MethodMan
2011-12-21 19:31:20