다음을 통해 공유


yield(C# 참조)

사용 하는 경우는 yield 키워드를 문에 나타낼 메서드, 연산자, 또는 get 표시 되는 반복기 접근자입니다.반복기를 사용 하면 컬렉션에서 사용자 지정 반복을 수행 합니다.다음 예제에서는 두 가지는 yield 문.

yield return <expression>;
yield break;

설명

사용 하는 yield return 문을 한 번에 각 요소를 반환 합니다.

반복기 메서드를 사용 하 여 소비는 foreach 문 또는 LINQ 쿼리 합니다.각 반복의 foreach 루프 반복기 메서드를 호출 합니다.경우는 yield return 문에 도달 반복기 메서드를 expression 반환 됩니다 코드에서 현재 위치를 유지 합니다.실행 위치에서 다음 반복기 함수가 호출 될 때 다시 시작 됩니다.

사용할 수 있는 yield break 문은 반복을 종료 하.

반복기에 대한 자세한 내용은 반복기(C# 및 Visual Basic)를 참조하십시오.

반복기 메서드 및 접근자 get

반복기의 선언에 다음과 같은 요구 사항을 충족 해야 합니다.

식의 형식에서의 암시적 변환이 존재 해야는 yield return 문은 반복기의 반환 형식입니다.

포함할 수 없습니다는 yield return 또는 yield break 문에서 메서드는 다음과 같은 특징이 있습니다.

예외 처리

A yield return 문을 try-catch 블록에서 찾을 수 없습니다.A yield return 문에 try-finally 문은 try 블록에서 찾을 수 있습니다.

A yield break try 블록 또는 catch 블록에서 문을 찾을 수 아니라는 finally 블록을 사용 합니다.

경우는 foreach 본문 (외부 반복기 메서드) 예외를 throw는 finally 블록이 반복기 메서드를 실행 합니다.

기술 구현

다음 반환 코드는 IEnumerable<string> 에서 반복기 메서드 및 다음 해당 요소를 반복 합니다.

IEnumerable<string> elements = MyIteratorMethod();
foreach (string element in elements)
{
   …
}

호출을 MyIteratorMethod 메서드의 본문이 실행 되지 않습니다.대신 호출에서 반환 된 IEnumerable<string> 에 elements 변수.

반복 중에 foreach 루프의 MoveNext 메서드 호출에 대 한 elements.본문에이 호출을 실행 합니다. MyIteratorMethod 다음까지 yield return 문에 도달 합니다.반환 하는 식의 yield return 문은 값 뿐만 아니라 결정는 element 변수는 루프 본문에서 소비에 대 한 뿐만 아니라는 Current 속성 요소는 IEnumerable<string>.

각 후속 반복에서의 foreach 어디에서 반복기 본문의 실행을 계속 하 여 반복에 이르렀을 때를 다시 중지 해제 상태로 yield return 문.foreach 루프를 완료 하면 끝 반복기 메서드 또는 yield break 문에 도달.

예제

다음 예제는 yield return 문 내부에 for 루프.각 반복의 foreach 문의 본문에 Process 호출을 만듭니다의 Power 반복기 기능입니다.반복기 함수를 호출할 때마다 다음 실행에 진행 되는 yield return 의 다음 반복 동안에 발생 하는 문의 for 루프.

반복기 메서드 반환 형식이 IEnumerable, 반복기 인터페이스 형식입니다.반복기 메서드 호출 되 면 숫자의 거듭제곱이 들어 있는 열거 가능한 개체를 반환 합니다.

public class PowersOf2
{
    static void Main()
    {
        // Display powers of 2 up to the exponent of 8:
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }

    public static System.Collections.IEnumerable Power(int number, int exponent)
    {
        int result = 1;

        for (int i = 0; i < exponent; i++)
        {
            result = result * number;
            yield return result;
        }
    }

    // Output: 2 4 8 16 32 64 128 256
}

다음 예제는 get 접근자는 반복기입니다.예제에서 각 yield return 사용자 정의 클래스의 인스턴스를 반환 하는 명령문입니다.

public static class GalaxyClass
{
    public static void ShowGalaxies()
    {
        var theGalaxies = new Galaxies();
        foreach (Galaxy theGalaxy in theGalaxies.NextGalaxy)
        {
            Debug.WriteLine(theGalaxy.Name + " " + theGalaxy.MegaLightYears.ToString());
        }
    }

    public class Galaxies
    {

        public System.Collections.Generic.IEnumerable<Galaxy> NextGalaxy
        {
            get
            {
                yield return new Galaxy { Name = "Tadpole", MegaLightYears = 400 };
                yield return new Galaxy { Name = "Pinwheel", MegaLightYears = 25 };
                yield return new Galaxy { Name = "Milky Way", MegaLightYears = 0 };
                yield return new Galaxy { Name = "Andromeda", MegaLightYears = 3 };
            }
        }

    }

    public class Galaxy
    {
        public String Name { get; set; }
        public int MegaLightYears { get; set; }
    }
}

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

foreach, in(C# 참조)

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조

반복기(C# 및 Visual Basic)