Что такое итераторы и генераторы C # и как я могу их использовать - PullRequest
14 голосов
/ 22 сентября 2010

Я разработчик VB.Net, новичок в C #, Просматривая документацию по C #, я прошел через Итераторы и Генераторы, но не смог полностью понять суть использования, я нашел там любого, кто может объяснить (в vb perceptive; если возможно)

1 Ответ

22 голосов
/ 22 сентября 2010

Итераторы - это простой способ генерировать последовательность элементов, без необходимости реализовывать IEnumerable<T> / IEnumerator<T> самостоятельно.Итератор - это метод, который возвращает IEnumerable<T>, который можно перечислить в цикле foreach.

Вот простой пример:

public IEnumerable<string> GetNames()
{
    yield return "Joe";
    yield return "Jack";
    yield return "Jane";
}

foreach(string name in GetNames())
{
    Console.WriteLine(name);
}

Обратите внимание на операторы yield return: этот оператор donна самом деле не возвращаются из метода, они просто «передают» следующий элемент тому, кто читает реализацию.

Когда компилятор встречает блок итератора, он фактически переписывает его в конечный автомат в классе, который реализуетIEnumerable<T> и IEnumerator<T>.Каждый оператор yield return в итераторе соответствует состоянию в этом автомате.

См. эту статью Джона Скита для получения более подробной информации об итераторах.

...