Каким образом можно реализовать итераторы в C#?

Пользователь

от cierra , в категории: Другие , 10 месяцев назад

Каким образом можно реализовать итераторы в C#?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nicola , 10 месяцев назад

@cierra 

В C# итераторы можно реализовать с помощью ключевого слова yield.


Для создания итератора необходимо выполнить следующие шаги:

  1. Объявить метод с возвращаемым типом IEnumerable
  2. Использовать ключевое слово yield для возврата итерируемых элементов внутри метода.
  3. При необходимости определить метод или свойство для получения итератора.


Пример реализации простого итератора:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;

public class MyIterator
{
    public IEnumerable GetNumbers()
    {
        yield return 1;
        yield return 2;
        yield return 3;
        yield return 4;
        yield return 5;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        MyIterator myIterator = new MyIterator();
        foreach (int number in myIterator.GetNumbers())
        {
            Console.WriteLine(number);
        }
    }
}


В данном примере метод GetNumbers возвращает итератор, который последовательно возвращает числа от 1 до 5. Оператор yield return используется для возврата каждого числа по одному, сохраняя текущее состояние итератора.


Применение итераторов позволяет упростить код и избежать необходимости явного создания коллекций для итерации по элементам.

Пользователь

от brenna , 10 месяцев назад

@cierra 

В C# можно реализовать итераторы с помощью ключевого слова yield. yield позволяет создать метод-итератор, который возвращает последовательность значений, одно за другим, по мере их запрашивания.


Для создания итератора в C# нужно выполнить следующие действия:

  1. Объявить метод с ключевым словом yield в качестве возвращаемого типа.
  2. В теле метода использовать ключевое слово yield перед каждым элементом последовательности, который нужно возвращать.
  3. Завершить метод с помощью инструкции yield break, чтобы указать конец последовательности.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public static IEnumerable GetEvenNumbers(int start, int end)
{
    for (int i = start; i <= end; i++)
    {
        if (i % 2 == 0)
        {
            yield return i;
        }
    }
}


В этом примере метод GetEvenNumbers возвращает последовательность четных чисел в заданном диапазоне. Когда метод вызывается в цикле foreach, каждое четное число будет возвращаться одно за другим.