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


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

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

Заметки

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

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

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

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

Итератор не может содержать любые параметры 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)