yield c# 實(shí)現(xiàn)自定義迭代器技巧

c#
小樊
90
2024-07-14 04:35:21

在C#中,可以通過(guò)實(shí)現(xiàn)IEnumerable接口和IEnumerator接口來(lái)創(chuàng)建自定義迭代器。下面是一個(gè)簡(jiǎn)單的示例,演示如何創(chuàng)建一個(gè)自定義迭代器:

using System;
using System.Collections;
using System.Collections.Generic;

public class CustomIterator : IEnumerable<int>
{
    private List<int> numbers;

    public CustomIterator(List<int> numbers)
    {
        this.numbers = numbers;
    }

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

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

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
        CustomIterator customIterator = new CustomIterator(numbers);

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

在上面的示例中,CustomIterator類實(shí)現(xiàn)了IEnumerable<int>接口,并且實(shí)現(xiàn)了GetEnumerator方法。在GetEnumerator方法中,使用yield return語(yǔ)句來(lái)返回迭代器中的元素。然后在Main方法中,使用foreach循環(huán)來(lái)迭代自定義迭代器,并打印每個(gè)元素的值。

通過(guò)這種方式,可以靈活地自定義迭代器,實(shí)現(xiàn)對(duì)各種數(shù)據(jù)結(jié)構(gòu)的迭代操作。

0