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.
Consulte também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários