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

Оператор yield

В методе, который возвращает IEnumerable или IEnumerable<T>, можно писать yield return с очередным значением. Компилятор строит итератор: код после yield return возобновляется при следующем шаге перечисления. Для типизированного варианта нужен using System.Collections.Generic.

Синтаксис

yield return выражение; yield break;

Пример

Давайте отдадим три числа и выведем их в foreach:

using System; using System.Collections.Generic; class Program { static IEnumerable<int> GetNums() { yield return 1; yield return 2; yield return 3; } static void Main() { foreach (int num in GetNums()) { Console.WriteLine(num); } } }

Результат выполнения кода:

1 2 3

Пример

Давайте отдадим элементы из цикла:

using System; using System.Collections.Generic; class Program { static IEnumerable<int> GetRange(int count) { for (int i = 1; i <= count; i++) { yield return i; } } static void Main() { foreach (int num in GetRange(3)) { Console.WriteLine(num); } } }

Результат выполнения кода:

1 2 3

Пример

Давайте завершим перечисление через yield break:

using System; using System.Collections.Generic; class Program { static IEnumerable<int> GetNums() { yield return 1; yield break; yield return 2; } static void Main() { foreach (int num in GetNums()) { Console.WriteLine(num); } } }

Результат выполнения кода:

1

Пример

Давайте отдадим строки и выведем каждую:

using System; using System.Collections.Generic; class Program { static IEnumerable<string> GetLines() { yield return "abcde"; yield return "12345"; } static void Main() { foreach (string line in GetLines()) { Console.WriteLine(line); } } }

Результат выполнения кода:

"abcde" "12345"

Смотрите также

  • цикл foreach,
    которым обходят результат итератора
  • await foreach,
    который ждёт элементы асинхронного потока
  • локальная функция,
    внутри которой тоже можно писать yield
  • оператор return,
    который завершает обычный метод сразу
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить