Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpGvLzE 71 of 509 menu
◀ ▶

Ленивое выполнение последовательности в C#

Вызов метода-генератора не выполняет тело: метод только возвращает перечислитель. Тело стартует, когда цикл просит первый элемент. Код после yield return ждёт следующего шага.

Поэтому запись в консоль, чтение файла и другая работа внутри генератора привязаны к перебору, а не к строке, где последовательность создали.

Создадим последовательность и запросим только первый элемент. Метка "before" появляется раньше "start", потому что генератор ещё не шёл. Метка "middle" не появится: после первого элемента цикл останавливается:

static IEnumerable<int> Trace() { Console.WriteLine("start"); // выведет start yield return 1; Console.WriteLine("middle"); yield return 2; } var seq = Trace(); Console.WriteLine("before"); // выведет before foreach (int n in seq) { Console.WriteLine(n); // выведет 1 break; }

Опишите последовательность, которая без конца отдаёт номера 1, 2, 3 и так далее. Выведите только первые два номера.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить