首页 > 后端开发 > C++ > C# 中的 IEnumerable 和 IEnumerator:它们如何启用 foreach 循环和自定义迭代器?

C# 中的 IEnumerable 和 IEnumerator:它们如何启用 foreach 循环和自定义迭代器?

Patricia Arquette
发布: 2025-01-09 12:51:41
原创
664 人浏览过

IEnumerable and IEnumerator in C#: How Do They Enable foreach Loops and Custom Iterators?

深入理解 IEnumerable 和 IEnumerator:.NET 迭代器的核心机制

在 .NET 编程中,实现 IEnumerable 接口是启用 foreach 循环的关键。虽然 foreach 语法简洁易用,但其底层依赖于 IEnumerable 和 IEnumerator 接口。

IEnumerable 和 IEnumerator 的应用场景

IEnumerable 不是用来“替代” foreach 的;相反,实现 IEnumerable 是使用 foreach 的前提条件。当您编写 foreach 循环时,编译器实际上会将其转换为一系列对 IEnumerator 的 MoveNext 和 Current 方法的调用。

IEnumerable 和 IEnumerator 的区别

  • IEnumerable: 定义了 GetEnumerator 方法的接口,该方法返回一个 IEnumerator。
  • IEnumerator: 定义了 MoveNext 和 Current 两个方法的接口。MoveNext 将迭代器移动到序列中的下一项,而 Current 返回当前项。

为什么我们需要 IEnumerable 和 IEnumerator?

  • 自定义迭代器: 通过在自定义类上实现 IEnumerable,您可以使用 foreach 循环遍历这些类。
  • 理解迭代器机制: IEnumerator 提供了一种低级别的机制来遍历集合,允许您控制遍历过程。
  • 泛型集合: C# 编译器使用 IEnumerable 和 IEnumerator 来创建泛型集合类,例如 List 和 Dictionary
  • 异步编程: IEnumerator 可以与异步编程模型结合使用,以遍历异步序列。

实现 IEnumerable

要使类可迭代,您需要实现 IEnumerable 接口,这需要实现返回 IEnumerator 的 GetEnumerator 方法。

示例

考虑以下实现 IEnumerable 接口的自定义对象类:

<code class="language-csharp">public class CustomCollection : IEnumerable<int>
{
    private int[] data;

    public IEnumerator<int> GetEnumerator()
    {
        return new CustomEnumerator(data);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private class CustomEnumerator : IEnumerator<int>
    {
        // MoveNext 和 Current 方法用于遍历 data
    }
}</code>
登录后复制

通过实现 IEnumerable 并提供自定义枚举器,您现在可以使用 foreach 循环遍历 CustomCollection 的实例。

以上是C# 中的 IEnumerable 和 IEnumerator:它们如何启用 foreach 循环和自定义迭代器?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板