다음을 통해 공유


Yield 문(Visual Basic)

컬렉션의 다음 요소로 보냅니다는 For Each...Next 문.

Yield expression

매개 변수

용어

정의

expression

필수 요소.반복기 함수 형식으로 암시적으로 변환할 수 있는 식 또는 Get 를 포함 하는 접근자의 Yield 문.

설명

Yield 의 컬렉션을 한 번에 하나의 요소 반환 하는 명령문입니다.Yield 문의 반복기 함수에 포함 되어 또는 Get 컬렉션에서 사용자 지정 반복을 수행 하는 접근자입니다.

사용 하 여 반복기 함수는 소비는 For Each...Next 문(Visual Basic) 또는 LINQ 쿼리 합니다.각 반복의 For Each 루프 반복기 함수를 호출 합니다.때에 Yield 문에 반복기 함수에 도달 expression 반환 됩니다 코드에서 현재 위치를 유지 합니다.실행 위치에서 다음 반복기 함수가 호출 될 때 다시 시작 됩니다.

암시적 변환의 형식에서 존재 해야 expression 에 Yield 문은 반복기의 반환 형식입니다.

사용할 수 있습니다는 Exit Function 또는 Return 문을 반복을 종료 합니다.

"Yield"는 예약어 이며에서 사용 될 때 특별 한 의미가 있는 Iterator 함수 또는 Get 접근자입니다.

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

반복기 함수와 Get 접근자

반복기 함수의 선언 또는 Get 접근자는 다음 요구 사항을 충족 해야 합니다.

반복기 함수는 이벤트, 인스턴스 생성자, 정적 생성자 또는 정적 소멸자에서 발생할 수 없습니다.

반복기 함수는 익명 함수를 수 있습니다.자세한 내용은 반복기(C# 및 Visual Basic)을 참조하십시오.

예외 처리

A Yield 문 안에 수은 Try 블록은 Try...Catch...Finally 문(Visual Basic).A Try 있는 블록은 Yield 문이 있을 수 있습니다 Catch 차단 되지 않으며 가질 수는 Finally 블록.

A Yield 문 안 내는 Catch 블록 또는 Finally 블록.

경우는 For Each 본문 반복기 기능) (외부 예외를 throw 한 Catch 블록 반복기 함수에서 실행 되지 않습니다 있지만 Finally 반복기 함수에서 블록이 실행.A Catch 는 반복기 함수 블록 catch 반복기 함수 안에서 발생 하는 예외에 대해서만 합니다.

기술 구현

다음 반환 코드는 IEnumerable (Of String) 는 반복기 함수에서 다음의 요소를 통해 반복 하 고 있는 IEnumerable (Of String).

Dim elements As IEnumerable(Of String) = MyIteratorFunction()
    …
For Each element As String In elements
Next

호출을 MyIteratorFunction 함수의 본문은 실행 하지 않습니다.대신 호출에서 반환 된 IEnumerable(Of String) 에 elements 변수.

반복 중에 For Each 루프의 MoveNext 메서드 호출에 대 한 elements.본문에이 호출을 실행 합니다. MyIteratorFunction 다음까지 Yield 문에 도달 합니다.Yield 값 뿐만 아니라 결정 하는 식을 반환 하는 명령문의 element 변수는 루프 본문에서 소비에 대 한도 Current 속성 요소는 IEnumerable (Of String).

각 후속 반복에서의 For Each 어디에서 반복기 본문의 실행을 계속 하 여 반복에 이르렀을 때를 다시 중지 해제 상태로 Yield 문.For Each 루프 완료 되 면 반복기 함수의 끝 또는 Return 또는 Exit Function 문에 도달 합니다.

예제

다음 예제는 Yield 문 내부에 에 대 한...다음 루프.각 반복에서 각각에 대 한 문의 본문에 Main 호출을 만듭니다는 Power 반복기 기능.반복기 함수를 호출할 때마다 다음 실행에 진행 되는 Yield 의 다음 반복 동안에 발생 하는 문의 For…Next 루프.

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

Sub Main()
    For Each number In Power(2, 8)
        Console.Write(number & " ")
    Next
    ' Output: 2 4 8 16 32 64 128 256
    Console.ReadKey()
End Sub

Private Iterator Function Power(
ByVal base As Integer, ByVal highExponent As Integer) _
As System.Collections.Generic.IEnumerable(Of Integer)

    Dim result = 1

    For counter = 1 To highExponent
        result = result * base
        Yield result
    Next
End Function

다음 예제는 Get 접근자는 반복기입니다.속성 선언에 포함 된 Iterator 한정자입니다.

Sub Main()
    Dim theGalaxies As New Galaxies
    For Each theGalaxy In theGalaxies.NextGalaxy
        With theGalaxy
            Console.WriteLine(.Name & "  " & .MegaLightYears)
        End With
    Next
    Console.ReadKey()
End Sub

Public Class Galaxies
    Public ReadOnly Iterator Property NextGalaxy _
    As System.Collections.Generic.IEnumerable(Of Galaxy)
        Get
            Yield New Galaxy With {.Name = "Tadpole", .MegaLightYears = 400}
            Yield New Galaxy With {.Name = "Pinwheel", .MegaLightYears = 25}
            Yield New Galaxy With {.Name = "Milky Way", .MegaLightYears = 0}
            Yield New Galaxy With {.Name = "Andromeda", .MegaLightYears = 3}
        End Get
    End Property
End Class

Public Class Galaxy
    Public Property Name As String
    Public Property MegaLightYears As Integer
End Class

다른 예제를 보려면 반복기(C# 및 Visual Basic)를 참조하십시오.

요구 사항

Visual Studio 2012

참고 항목

기타 리소스

반복기(C# 및 Visual Basic)

문(Visual Basic)