Поделиться через


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

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

Заметки

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

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

Итератор можно вызывать из кода клиента с помощью Оператор For Each... Next (Visual Basic).

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

Итератор не может содержать любые параметры ByRef.

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

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

Дополнительные сведения об итераторах см. в разделе Итераторы (C# и Visual Basic).

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

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

Пример

Следующий пример демонстрирует функцию итератора.Функция итератора имеет выписку Yield, которая находится внутри цикла For… next.Каждая итерация тела выписки Оператор 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

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

См. также

Ссылки

Оператор Yield (Visual Basic)

IteratorStateMachineAttribute

Другие ресурсы

Итераторы (C# и Visual Basic)