반복기(Visual Basic)Iterator (Visual Basic)

함수 또는 Get 접근자가 반복기 임을 지정 합니다.Specifies that a function or Get accessor is an iterator.

설명Remarks

반복기 는 컬렉션에 대해 사용자 지정 반복을 수행 합니다.An iterator performs a custom iteration over a collection. 반복기는 Yield 문을 사용 하 여 컬렉션의 각 요소를 한 번에 하나씩 반환 합니다.An iterator uses the Yield statement to return each element in the collection one at a time. Yield 문에 도달 하면 코드의 현재 위치가 유지 됩니다.When a Yield statement is reached, the current location in code is retained. 다음에 반복기 함수가 호출되면 해당 위치에서 실행이 다시 시작됩니다.Execution is restarted from that location the next time that the iterator function is called.

반복기는 함수 또는 속성 정의의 Get 접근자로 구현할 수 있습니다.An iterator can be implemented as a function or as a Get accessor of a property definition. Iterator 한정자는 반복기 함수 또는 Get 접근자의 선언에 나타납니다.The Iterator modifier appears in the declaration of the iterator function or Get accessor.

For Each ...를 사용 하 여 클라이언트 코드에서 반복기를 호출 합니다. 다음 문.You call an iterator from client code by using a For Each...Next Statement.

반복기 함수 또는 Get 접근자의 반환 형식은 IEnumerable, IEnumerable<T>, IEnumerator또는 IEnumerator<T>수 있습니다.The return type of an iterator function or Get accessor can be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

반복기에는 ByRef 매개 변수를 사용할 수 없습니다.An iterator cannot have any ByRef parameters.

반복기는 이벤트, 인스턴스 생성자, 정적 생성자 또는 정적 소멸자에서 발생할 수 없습니다.An iterator cannot occur in an event, instance constructor, static constructor, or static destructor.

반복기는 익명 함수 일 수 있습니다.An iterator can be an anonymous function. 자세한 내용은 반복기를 참조하세요.For more information, see Iterators.

사용법Usage

Iterator 한정자는 다음 컨텍스트에서 사용할 수 있습니다.The Iterator modifier can be used in these contexts:

예제Example

다음 예제에서는 반복기 함수를 보여 줍니다.The following example demonstrates an iterator function. 반복기 함수에는 에 대 한 Yield 문이 있습니다. Next 루프.The iterator function has a Yield statement that is inside a For…Next loop. Main의 각 문 본문 에 대 한 각 반복은 Power 반복기 함수에 대 한 호출을 만듭니다.Each iteration of the For Each statement body in Main creates a call to the Power iterator function. 반복기 함수를 호출할 때마다 다음에 Yield 루프를 반복하는 도중에 For…Next 문이 실행됩니다.Each call to the iterator function proceeds to the next execution of the Yield statement, which occurs during the next iteration of the For…Next loop.

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

예제Example

다음 예제는 반복기인 Get 접근자에 대해 설명합니다.The following example demonstrates a Get accessor that is an iterator. Iterator 한정자는 속성 선언에 있습니다.The Iterator modifier is in the property declaration.

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

추가 예제는 반복기를 참조 하세요.For additional examples, see Iterators.

참고자료See also