Compartilhar via


Iterador (Visual Basic)

Especifica que uma função ou Get acessador é um iterador.

Observações

Um iterador executa uma iteração personalizada em uma coleção. Um iterador usa a instrução Yield para retornar cada elemento na coleção um de cada vez. Quando uma Yield instrução é alcançada, o local atual no código é mantido. A execução é reiniciada desse local na próxima vez que a função iterador for chamada.

Um iterador pode ser implementado como uma função ou como acessador Get de uma definição de propriedade. O Iterator modificador aparece na declaração da função ou Get acessador do iterador.

Você chama um iterador do código do cliente usando um For Each... Próxima instrução.

O tipo de retorno de uma função de iterador ou Get acessador pode ser IEnumerable, IEnumerable<T>, ou IEnumeratorIEnumerator<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 uma função anônima. Para obter mais informações, consulte Iteradores.

Uso

O Iterator modificador pode ser usado nestes contextos:

Exemplo 1

O exemplo a seguir demonstra uma função de iterador. A função iterador tem uma Yield instrução que está dentro de um For... Próximo loop. Cada iteração do corpo Main da instrução For Each cria uma chamada para a Power função iterador. Cada chamada para a função iterador prossegue para a próxima execução da Yield 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