Iterador (Visual Basic)
Especifica que uma função ou acessador Get
é um iterador.
Comentários
Um método iterador executa uma iteração personalizada em uma coleção. Um iterador usa a instrução Yield para retornar um elemento da coleção por vez. Quando uma instrução Yield
for atingida, o local atual no código será retido. A execução será reiniciada desse local na próxima vez que a função iteradora for chamada.
Um iterador pode ser implementado como função ou acessador Get
de uma definição de propriedade. O modificador Iterator
aparece na declaração da função de iterador ou do acessador Get
.
Chame um iterador de um código de cliente usando uma Instrução For Each...Next.
O tipo de retorno de uma função de iterador ou acessador Get
pode ser IEnumerable, IEnumerable<T>, IEnumerator ou IEnumerator<T>.
Um iterador não pode ter parâmetros ByRef
.
Um iterador não pode ocorrer em um evento, um construtor de instância, um construtor estático ou um destruidor estático.
Um iterador pode ser função anônima. Para obter mais informações, consulte Iteradores.
Uso
O modificador Iterator
pode ser usado nestes contextos:
Exemplo 1
O exemplo a seguir demonstra o uso de uma função de iterador. A função de iterador tem uma instrução Yield
que está em um loop For…Next. Cada iteração do corpo da instrução For Each em Main
cria uma chamada para a Power
função de iterador. Cada chamada à função iteradora prossegue para a próxima execução da instrução Yield
que ocorre durante a próxima iteração do loop 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
Exemplo 2
O exemplo a seguir demonstra um acessador Get
que é um iterador. O modificador Iterator
está na declaração de propriedade.
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
Para obter mais exemplos adicionais, consulte Iteradores.