Поделиться через


yield (справочник по C#)

Обновлен: Ноябрь 2007

Используется в блоке итератора для предоставления значения объекта перечислителя или для сообщения о конце итерации. Принимает одну из следующих форм:

yield return <expression>;
yield break;

Заметки

Выражение expression вычисляется и возвращается в виде значения объекту перечислителя; выражение expression должно неявно преобразовываться в тип результата итератора.

Инструкция yield может располагаться только внутри блока iterator, который может использоваться в качестве основной части метода, оператора или метода доступа. Основная часть таких методов, операторов или методов доступа управляется следующими ограничениями:

  • Использование небезопасных блоков не допускается.

  • Параметры метода, оператора или метода доступа не могут иметь значение ref или out.

Оператор yield не может использоваться в анонимных методах. Дополнительные сведения см. в разделе Анонимные методы (Руководство по программированию в C#).

При использовании с expression инструкция yield return не может размещаться в блоке catch или в блоке try, имеющем одно или более предложений catch. Дополнительные сведения см. в разделе Операторы обработки исключений (Справочник по C#).

Пример

В следующем примере инструкция yield используется внутри блока итератора, который является методом Power(int number, int power). При вызове метода Power он возвращает перечисляемый объект, который содержит степени числа. Обратите внимание, что типом возвращаемого значения метода Power является IEnumerable, тип интерфейса итератора.

public class List
{
    //using System.Collections;
    public static IEnumerable Power(int number, int exponent)
    {
        int counter = 0;
        int result = 1;
        while (counter++ < exponent)
        {
            result = result * number;
            yield return result;
        }
    }

    static void Main()
    {
        // Display powers of 2 up to the exponent 8:
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }
}
/*
Output:
2 4 8 16 32 64 128 256 
*/

Спецификация языка C#

Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:

  • 19.3 Итераторы

  • 22 Итераторы

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

foreach, in (Справочник по C#)

Использование итераторов (Руководство по программированию в C#)

Другие ресурсы

Справочник по C#