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