理解 C# 中的迭代器

一.介绍

C# 中的迭代器是一项强大的功能,可让您遍历数组、列表或任何自定义集合类型等集合。它们提供了一种优雅的方式来按顺序访问元素,而无需暴露集合的底层表示。本文探讨了迭代器的概念、它们的实现以及 C# 中的实际用例。

二.什么是迭代器?

迭代器是一种特殊对象,它便于一次遍历集合中的一个元素。在 C# 中,迭代器是使用方法、属性或访问器中的 Yield 关键字实现的。调用迭代器时,它不会立即执行其代码。相反,它会返回一个枚举器,让您可以遍历集合。

三.在 C# 中实现迭代器

1.使用yield return

Yield return 语句提供了一种实现迭代器的简单方法。它允许您一次返回一个元素。

这是一个使用yield return实现的迭代器的基本示例。

using System;
using System.Collections.Generic;
public class NumberCollection
{
    private int[] numbers = { 1, 2, 3, 4, 5 };

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int number in numbers)
        {
            yield return number;
        }
    }
}

public class Program
{
    public static void Main()
    {
        NumberCollection collection = new NumberCollection();

        foreach (int number in collection)
        {
            Console.WriteLine(number);
        }
    }
}

2.使用yield break

Yield break 语句用于提前结束迭代。当满足某些条件且不需要进一步迭代时,该语句很有用。

using System;
using System.Collections.Generic;
public class EvenNumberCollection
{
    private int[] numbers = { 1, 2, 3, 4, 5, 6 };

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int number in numbers)
        {
            if (number % 2 != 0)
            {
                yield break;
            }
            yield return number;
        }
    }
}

public class Program
{
    public static void Main()
    {
        EvenNumberCollection collection = new EvenNumberCollection();

        foreach (int number in collection)
        {
            Console.WriteLine(number);
        }
    }
}

3.自定义迭代器

还可以为自定义集合类型实现迭代器。当您需要明确控制迭代逻辑时,这很有用。

using System;
using System.Collections;
using System.Collections.Generic;
public class CustomCollection<T> : IEnumerable<T>
{
    private T[] items;

    public CustomCollection(T[] items)
    {
        this.items = items;
    }

    public IEnumerator<T> GetEnumerator()
    {
        for (int i = 0; i < items.Length; i++)
        {
            yield return items[i];
        }
    }

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

public class Program
{
    public static void Main()
    {
        CustomCollection<string> collection = new CustomCollection<string>(
            new string[] { "Hello", "World", "C#", "Iterators" });

        foreach (string item in collection)
        {
            Console.WriteLine(item);
        }
    }
}

四.使用迭代器的优点

  1. 简单性:迭代器简化了遍历集合所需的代码。
  2. 惰性求值:迭代器仅在需要时提供元素,从而避免不必要的计算或内存分配来提高性能。
  3. 抽象:它们提供了一种访问元素的方法,而无需暴露集合的底层结构。

五.结论

迭代器是 C# 的一个基本组成部分,它提供了一种方便的方法来遍历集合。通过使用 Yield Return 和 Yield Break 语句,您可以创建强大而灵活的迭代机制。无论您使用的是内置集合还是自定义类型,理解和利用迭代器都可以大大提高您编写简洁高效代码的能力。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢.锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值