Собственная последовательность в C#
Метод с yield return становится генератором: он не строит всю коллекцию сразу, а возвращает элементы по одному, когда перечислитель запрашивает MoveNext.
Состояние цикла (индекс, предыдущие значения) компилятор прячет в сгенерированный класс - достаточно описать правило следующего элемента.
Генератор Fibonacci не хранит весь ряд. На каждом шаге он отдаёт текущее число и запоминает два предыдущих для следующего запроса. При count 0 цикл не выполняется, и метод ничего не отдаёт:
static IEnumerable<int> Fib(int count)
{
int a = 0, b = 1;
for (int i = 0; i < count; i++)
{
yield return a;
(a, b) = (b, a + b);
}
}
Console.WriteLine(string.Join(", ", Fib(5))); // выведет 0, 1, 1, 2, 3
Верните три названия городов по одному при каждом шаге обхода.