IEnumerable和IEnumerator

Anonim

在我们深入了解IEnumerable和IEnumerator之间的区别之前,让我们首先理解Enumerator和Enumerable这两个术语,以及何时以及为何使用它们。

Enumerable是Array类中使用的模块,它为您提供Enumerator。类本身并不是每种方法。实际上,它使用一个名为“GetEnumerator”的方法,它为您提供一个Enumerator来检索其项目。

Enumerator是一个对象,它按照特定顺序返回集合中的每个项目,与请求完全一致。当您在C#中编写foreach循环时,编译器会生成使用枚举器的代码。

IEnumerator是由枚举器实现的接口,可枚举类实现IEnumerable接口。

什么是不可数的?

IEnumerable是一个基本接口,用于获取知道如何枚举(或迭代)集合中元素的对象。

它是迭代器模式的一种实现,它提供了一种遍历集合中对象的机制,而不管其内部结构如何。 IEnumerable接口表示可以在集合中迭代的对象。

它只使用一个方法“GetEnumerator”,它返回一个实现IEnumerator接口的枚举器类实例。

什么是Ienumerator?

另一方面,IEnumerator接口声明了两个方法--Reset()和MoveNext() - 以及一个属性Current。 MoveNext()返回一个布尔值,指示列表的结尾,并在调用Reset()方法后帮助定位列表中的第一个元素 - 它将枚举器设置为其默认位置,以便从列表重新迭代列表开始。

Current属性只能通过IEnumerator接口的实例调用,并返回列表中的当前元素。

IEnumerable和IEnumerator之间的区别

IEnumerable和Ienumerator的基础知识

IEnumerable和IEnumerator都是在.Net Framework中一起实现迭代器软件设计模式的接口。.Net Framework在实现IEnumerable和IEnumerator接口时访问自定义集合中的各个元素。 IEnumerable接口仅声明一个名为GetEnumerator的方法,该方法返回另一种称为该特定集合的IEnumerator接口的接口。另一方面,IEnumerator是所有非泛型枚举器的基本接口,用于读取集合中的数据。但是,枚举器不能用于修改基础集合。

方法

IEnumerable接口只定义了一个方法GetEnumerator(),它是在几种不同集合类型上使用的实例方法。它获取一个IEnumerator迭代器,可用于迭代集合中的所有值。当您在C#中编写foreach循环时,它生成的代码调用GetEnumerator方法来创建循环使用的枚举器。

另一方面,IEnumerator使用两个方法MoveNext()和Reset()以及一个属性Current。 MoveNext()方法将枚举数带到集合的下一个元素,而Reset()方法将枚举数设置为其默认位置,该位置位于集合中的第一个元素之前。

履行

IEnumerable是一个通用接口,它提供了循环元素的抽象,并且通过实现IEnumerable接口,泛型类本质上允许通过IEnumerator接口进行迭代。在这样做时,这些类最终提供了一个公共接口来检索IEnumerator的实例 支持所有基本导航方法集的对象。

IEnumerator是枚举器的基本接口,IEnumerable接口的使用要求该类必须实现IEnumerator。如果要为foreach提供支持,则需要实现这两个接口。抽象类'AbstractEnumerator'实现IEnumerator接口。

IEnumerable和IEnumerator的功能

IEnumerable接口以及支持IEnumerator接口允许您使用'foreach'语句迭代堆栈中的元素。它是用于集合类型对象的基本接口。迭代从堆栈中的顶部元素开始,以堆栈中最旧的元素结束。简而言之,它代表了一个可以枚举的对象。

与IEnumerator接口一起,它们使ArrayList元素能够以标准化的顺序方式进行迭代,从第一个元素开始,然后继续。 foreach语句使用IEnumerator接口的方法和属性来迭代集合中的所有元素。

IEnumerable与IEnumerator:比较图表

IEnumerable对IEnumerator的总结

简而言之,IEnumerable和IEnumerator都是用于枚举或迭代具有集合性质的类的接口,这意味着它们促进了自定义集合中的迭代访问。 IEnumerable是可用于集合类型对象的通用接口,通过实现IEnumerable接口,泛型类实际上可以通过IEnumerator接口进行迭代。它只使用一个方法GetEnumerator,它返回一个实现IEnumerator接口的枚举器类实例。IEnumerator接口旨在用作访问器,它不能用于修改底层集合。它提供了两个抽象方法Reset()和MoveNext(),以及一个属性Current来调用集合中的特定元素。