IEnumerable 和 IEnumerator

发布时间 2023-04-04 10:06:56作者: 张三删库跑路

什么是 IEnumerable

这是一个由可枚举类实现的接口。 整个集合在 c# 可以实现 IEnumerable 接口。 它返回 IEnumerator。 它不会根据代码中使用的访问说明符而更改。

IEnumerable 有一个称为 GetEnumerator 的方法。 此实现仅在类内部完成。

迭代过程使得在集合中遍历变得更容易。 它充当一个对象。 GetEnumerator 是用于实现 IEnumerator 接口的方法。

IEnumerable 通常被称为通用接口,因为代码编写得非常小,因为它只需要一次性实现。 在代码实现中使用多少构造函数来迭代所有元素并不重要。

该代码维护成本低,因为 修改 代码在一个平台下,不需要任何额外的更改。 它用 抽象化 用于数组中所有元素的迭代。

它使用一个 IEnumerator 迭代器,用于迭代所有元素。 因为它是一个泛型类,所以它很容易对数组中的元素进行迭代。 它提供了一个通用接口。 它用于所有非通用类。

什么是IEnumerator

它有两种方法来实现集合中所有元素的迭代。 它有两个方法,分别是 MoveNext 和 Reset。 MoveNext 是一种方法,它指出迭代还没有到达集合的最后一个元素。

Reset 方法的作用和它听起来的一样。 它指出在上一次迭代完成后再次开始迭代,直到数组的最后一个元素。

最后,一个对象是 Current,它给出当前元素作为迭代的结果。 它对其元素有一些特定的访问权限。 它只提供对其所有数组的只读访问。

IEnumerator 调用 current 属性,它负责返回列表中当前正在使用的元素。 它使用两种方法和属性来迭代对象。

每个语句使用数组列表并通过向前移动并使用其中一种方法开始迭代。 IEnumerator 无法返回 IEnumerable

它可以很容易地取回光标的当前状态。 IEnumerator 使用一个 具体 写作方式。 它在 通过迭代堆栈的第一个元素并结束到堆栈的最后一个元素。

IEnumerator接口为类内部的集合提供了迭代方式, IEnumerator 要求你实现三个方法:

  • MoveNext方法:该方法将集合索引加1,并返回一个bool值,指示是否已到达集合的末尾。
  • Reset方法:它将集合索引重置为其初始值-1,这会使枚举数无效。
  • Current方法: 返回position位置的当前对象

IEnumerableIEnumerator 的区别

IEnumerable 是模块,而 IEnumerator 是对象

IEnumerable 是用于迭代的序列,IEnumerator 则像是序列的一个游标。多个 IEnumerator 可以遍历同一个 IEnumerable,并且不会改变 IEnumerable 的状态,而IEnumerator 本身就是多状态的:每次调用 MoveNext(),当前游标都会向前移动一个元素。

  • IEnumerable 是一个可以迭代对象集合的接口,而 IEnumerator 是一个实现 IEnumerator 接口并提供遍历集合的方法的类。
  • IEnumerable 提供了一个返回 IEnumerator 对象的方法 (GetEnumerator),而 IEnumerator 提供了在集合中移动 (MoveNext) 和检索当前对象 (Current) 的方法。
  • IEnumerable 用于创建可以迭代的集合,而 IEnumerator 用于遍历这些集合。
  • IEnumerable 用于通用接口,而 IEnumerator 用于非通用接口。
  • IEnumerable 可以返回 IEnumerator
  • Enumerable 显示一个枚举对象,而 IEnumerator 具有每个语句。
  • IEnumerable 是一种 抽象 的写法,但是 IEnumerator 使用的是 具体 写作方式。

IEnumerable 生成 IEnumerator。 这里的 GetEnumerator是用来获取IEnumerator的。IEnumerator 有两个方法,Reset()MoveNext(),并且有一个称为 Current 的扩展属性。 MoveNext() 是一种生成布尔值的方法,该值指出列表的末尾元素。 Reset方法使枚举数成为默认位置。