asp.net

IEnumerable和ICollection简介

2024-01-14

虽然枚举接口IEnumerable提供了一种向前迭代集合的协议,但是它们并没有提供确定集合大小、根据索引访问成员、搜索以及修改集合的机制。为了实现这些功能,.NET Core定义了ICollection、IList和IDictionary接口。这些接口都支持泛型和非泛型版本。然而,非泛型版本的存在只是为了兼容遗留代码。


ICollection 接口是 System.Collections 命名空间中类的基接口。ICollection 接口扩展 IEnumerable。

IDictionary 和 IList 则是扩展 ICollection 的更为专用的接口。

如果 IDictionary 接口和 IList 接口都不能满足所需集合的要求,则从 ICollection 接口派生新集合类以提高灵活性。


ICollection是IEnumerable的加强型接口,它继承自IEnumerable接口,提供了同步处理、赋值及返回内含元素数目的功能。


可以简单总结为:

IEnumerable<T>(和IEnumerable):提供了最少的功能支持(仅支持元素枚举)。

ICollection<T>(和ICollection):提供一般的功能(例如Count属性)。

IList<T>/IDictionary<K, V>及其非泛型版本:支持最多的功能(包括根据索引/键进行“随机”访问)。


IEnumerable接口

IEnumerable接口是ICollection的父接口,凡实现此接口的类,都具备“可迭代”的能力。

IEnumerable接口只定义了一个方法:GetEnumerator,该方法将返回一个“迭代子”对象(或称为迭代器对象),是一个实现了IEnumerator接口的对象实例。

凡是实现了IEnumerable接口的类,都可以使用foreach循环迭代遍历


ICollection<T>

ICollection<T>是可以统计集合中对象的标准接口。

该接口可以确定集合的大小(Count),集合是否包含某个元素(Contains),复制集合到另外一个数组(ToArray),集合是否是只读的(IsReadOnly)。

如果一个集合是可编辑的,那么可以调用Add,Remove和Clear方法操作集合中的元素。

因为该接口继承IEnumerable<T>,所以可以使用foreach语句遍历集合。

集合主要接口.jpg

集合主要接口2.png