有人可以告诉我列表、集合和可枚举之间有什么区别
本文关键字:枚举 之间 什么 区别 告诉我 列表 集合 | 更新日期: 2023-09-27 18:18:27
当我做一个程序时,有时我会有这个疑问。我一直在使用List<T>
但我没有使用其他的。
我想知道什么时候每个都更好用,在什么情况下使用。
你可以自己阅读文档。我将在这里给出一个简短的总结:
-
IEnumerable
是一个接口,用于在集合上公开枚举器。如果希望能够支持迭代,例如在foreach
循环中,请实现此接口。 -
Collection
是IEnumerable
的实现(因此您可以迭代它(,通常由想要具有类似集合的行为(即使用Add
、Remove
、Contains
等(的用户定义类进一步扩展。它也可以"按原样"使用。 -
List
也是IEnumerable
的实现(因此您可以迭代它(,通常"按原样"用作特定类型对象的容器。在后台使用动态调整数组,是ArrayList
的通用等效项。
请注意,虽然IEnumerable
既可以是泛型类也可以是非泛型类,但Collection
和List
只能用作泛型类。
List 是以线性方式保存项目的可实例化类型。(编辑:我被告知它是用动态数组实现的,而不是用链表实现的,这只是我的猜测(。
ICollection
/CollectionBase
和IEnumerable
不是直接可实例化的类型。
CollectionBase
/ICollection
是一个基类/接口,由任何认为自己是集合并保存多个项目的类继承/实现。 CollectionBase
/ICollection
还允许您在不知道其实现的情况下传递集合。
IEnumerable
也是一个接口,提供循环访问集合的方法。 IEnumerable
基本上允许您在集合上使用foreach
循环。您可以直接使用接口方法来运行一些C++样式的迭代器,但foreach
循环不太容易出错。
MSDN 可以:
-
List<T>
-
IList<T>
-
ICollection<T>
-
IEnumerable<T>
如果你看一下这三者的定义(见下文(,你会注意到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
IEnumerable
公开枚举器,该枚举器支持对指定类型的集合进行简单迭代。
public interface IEnumerable<out T> : IEnumerable