Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Указывает, что функция или 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
Дополнительные примеры см. в разделе "Итераторы".