Итератор (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
Дополнительные примеры см. в разделе "Итераторы".