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