Итератор (Visual Basic)

Указывает, что функция или Get метод доступа является итератором.

Замечания

Итератор выполняет пользовательскую итерацию по коллекции. Итератор использует инструкцию Yield для возврата каждого элемента в коллекции по одному за раз. По достижении инструкции текущее Yield расположение в коде сохраняется. При следующем вызове функции итератора выполнение возобновляется с этого места.

Итератор можно реализовать как функцию или Get как метод доступа к определению свойства. Модификатор Iterator отображается в объявлении функции итератора или Get метода доступа.

Вы вызываете итератор из клиентского кода с помощью параметра For Each... Следующая инструкция.

Возвращаемый тип функции итератора или Get метода доступа может быть IEnumerable, IEnumerable<T>IEnumeratorили IEnumerator<T>.

Итератор не может иметь никаких ByRef параметров.

Итератор не может использоваться в событии, конструкторе экземпляра, статическом конструкторе или статическом деструкторе.

Итератор может быть анонимной функцией. Дополнительные сведения см. в разделе Итераторы.

Использование

Модификатор Iterator можно использовать в следующих контекстах:

Пример 1

В следующем примере показана итераторная функция. Функция итератора имеет Yield оператор, который находится внутри for... Следующий цикл. Каждая итерация текста инструкции For Each создает Main вызов Power функции итератора. При каждом вызове функции итератора происходит переход к следующему выполнению оператора Yield, которое осуществляется во время следующей итерации цикла For…Next.

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

Пример 2

В следующем примере демонстрируется метод доступа 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

Дополнительные примеры см. в разделе "Итераторы".

См. также