Iterador (Visual Basic)
Especifica que uma função ou Get
acessador é um iterador.
Observações
Um iterador executa uma iteração personalizada sobre uma coleção. Um iterador usa a instrução Yield para retornar cada elemento da coleção, um de cada vez. Quando uma Yield
instrução é alcançada, o local atual no código é mantido. A execução é reiniciada a partir desse local na próxima vez que a função iterador for chamada.
Um iterador pode ser implementado como uma função ou como um Get
acessador de uma definição de propriedade. O Iterator
modificador aparece na declaração da função iteradora ou Get
acessador.
Você chama um iterador do código do cliente usando um For Each... Próxima declaração.
O tipo de retorno de uma função iteradora ou Get
acessador 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, construtor de instância, construtor estático ou destruidor estático.
Um iterador pode ser uma função anónima. Para obter mais informações, consulte Iteradores.
Utilização
O Iterator
modificador pode ser usado nestes contextos:
Exemplo 1
O exemplo a seguir demonstra uma função iteradora. A função iterador tem uma Yield
instrução que está dentro de um ... Próximo ciclo. Cada iteração do corpo da instrução For Each em Main
cria uma chamada para a Power
função iterador. Cada chamada para a função iterador prossegue para a Yield
próxima execução da instrução, que ocorre durante a próxima iteração do For…Next
loop.
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 Get
acessador que é um iterador. O Iterator
modificador 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 exemplos adicionais, consulte Iteradores.