yield(C# 참조)

yield 키워드는 해당 키워드가 표시되는 메서드가 반복기 블록임을 컴파일러에 나타냅니다. 컴파일러는 클래스를 생성하여 반복기 블록에 표현된 동작을 구현합니다. 반복기 블록에서 yield 키워드를 return 키워드와 함께 사용하여 열거자 개체에 값을 제공합니다. 예를 들어, 이 값은 foreach 문의 각 루프에서 반환되는 값입니다. 또한 yield 키워드를 break와 함께 사용하여 반복의 끝을 나타냅니다. 반복기에 대한 자세한 내용은 반복기(C# 프로그래밍 가이드)를 참조하십시오. 다음 예제에서는 두 가지 형태의 yield 문을 보여 줍니다.

yield return <expression>;
yield break;

설명

yield return 문에서는 expression이 계산되고 열거자 개체에 대한 값으로 반환됩니다. expression을 반복기의 yield 형식으로 암시적으로 변환할 수 있어야 합니다.

yield break 문에서는 컨트롤이 반복기의 호출자에게 무조건 반환됩니다. 호출자는 열거자 개체의 IEnumerator.MoveNext 메서드(또는 해당하는 제네릭 System.Collections.Generic.IEnumerable<T>) 또는 Dispose 메서드입니다.

yield 문은 메서드, 연산자 또는 접근자의 본문으로 구현될 수 있는 iterator 블록 내에만 나타날 수 있습니다. 이러한 메서드, 연산자 또는 접근자의 본문에는 다음 제한 사항이 적용됩니다.

  • 안전하지 않은 블록은 사용할 수 없습니다.

  • 메서드, 연산자 또는 접근자에 대한 매개 변수는 ref 또는 out일 수 없습니다.

  • yield return 문은 try-catch 블록 내에 포함될 수 없습니다. try 블록 뒤에 finally 블록이 오는 경우에만 try 블록에 포함될 수 있습니다.

  • yield break 문은 try 블록이나 catch 블록에 포함될 수 있지만 finally 블록에는 포함될 수 없습니다.

무명 메서드에는 yield 문을 사용할 수 없습니다. 자세한 내용은 무명 메서드(C# 프로그래밍 가이드)을 참조하십시오.

expression과 함께 사용할 경우, catch 블록이나 catch 절이 하나 이상 포함된 try 블록에는 yield return 문을 포함할 수 없습니다. 자세한 내용은 예외 처리문(C# 참조)을 참조하십시오.

예제

다음 예제에서 yield 문은 반복기 블록인 Power(int number, int power) 메서드 내에서 사용됩니다. Power 메서드가 호출되면 숫자의 거듭제곱이 들어 있는 열거 가능한 개체가 반환됩니다. Power 메서드의 반환 형식은 반복기 인터페이스 형식인 System.Collections.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# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

foreach, in(C# 참조)

반복기 사용(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조