Looking for c# Keywords? Try Ask4Keywords

C# Language Создание итераторов с использованием урожая


пример

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

Большинство методов возвращают управление своим вызывающим абонентам через обычные операторы return , которые располагают всем локальным данным для этого метода. Напротив, методы, которые используют операторы yield позволяют им возвращать несколько значений вызывающему по запросу, сохраняя при этом локальное состояние между этими возвращаемыми значениями. Эти возвращаемые значения представляют собой последовательность. В итераторах используются два типа операторов yield :

  • yield return , который возвращает управление вызывающему, но сохраняет состояние. Вызов будет продолжать выполнение из этой строки, когда управление будет возвращено к нему.

  • yield break , который функционирует аналогично нормальному оператору return - это означает конец последовательности. Нормальные операторы return сами являются незаконными в блоке итератора.

В приведенном ниже примере показан метод итератора, который может быть использован для генерации последовательности Фибоначчи :

IEnumerable<int> Fibonacci(int count)
{
    int prev = 1;
    int curr = 1;
    
    for (int i = 0; i < count; i++)
    {
        yield return prev;
        int temp = prev + curr;
        prev = curr;
        curr = temp;
    }
}

Этот итератор затем может быть использован для создания перечислителя последовательности Фибоначчи, который может быть использован вызывающим методом. В приведенном ниже коде показано, как можно перечислять первые десять членов в последовательности Фибоначчи:

void Main()
{
    foreach (int term in Fibonacci(10))
    {
        Console.WriteLine(term);
    }
}

Выход

1
1
2
3
5
8
13
21
34
55