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

Введение в перечисление и генераторы в C#

Перечисление - это проход по элементам по одному. Снаружи не видно, лежат ли они в массиве, в списке или вообще нигде не хранятся и считаются в момент запроса. Для вызывающего кода источник всё равно один: есть следующий элемент или элементы кончились.

Так уже устроен цикл по списку. Цикл не открывает хранилище и не считает индекс сам. На каждом шаге он спрашивает, остался ли ещё элемент, и только потом читает текущий. Этот вопрос задаёт метод MoveNext: пока он отвечает согласием, цикл продолжается, а когда элементы кончились - останавливается.

Один и тот же проход подходит разным источникам. Списку чисел, строкам файла и последовательности, которую ещё предстоит посчитать, не нужно общее внутреннее устройство. Достаточно обещания, что следующий элемент можно получить.

Генератор - это метод, который отдаёт элементы по одному и не собирает их в список заранее. После каждого элемента метод останавливается и ждёт нового запроса. Такую остановку записывают командой yield return: она отдаёт один элемент и оставляет метод на паузе до следующего шага.

Вызывающий код при этом остаётся обычным циклом. Следующее число или следующая строка появляются только тогда, когда цикл до них дошёл. Пока запроса нет, тело генератора не выполняется.

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