Compartilhar via


Iterador (Visual Basic)

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

Comentários

Um iterador executa uma iteração personalizada em uma coleção. Um iterador usa a Yield instrução para retornar cada elemento da coleção ao mesmo tempo. Quando um Yield instrução for atingida, o local atual no código é retido. Execução for reiniciada nesse local na próxima vez que a função do iterador é chamada.

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

Chamar um iterador do código de cliente usando um Instrução For Each...Next (Visual Basic).

O tipo de retorno de uma função de iterador ou Get pode ser acessador IEnumerable, IEnumerable, IEnumerator, ou IEnumerator.

Um iterador não pode ter qualquer ByRef parâmetros.

Um iterador não pode ocorrer em um evento, construtor de instância, o construtor estático ou destruidor estático.

Um iterador pode ser uma função anônima. Para mais informações, consulte Iteradores (C# e Visual Basic).

Para obter mais informações sobre os iteradores, consulte Iteradores (C# e Visual Basic).

Uso

O modificador Iterator pode ser utilizado nestes contextos:

Exemplo

O exemplo a seguir demonstra uma função do iterador. Função iterador tem um Yield instrução dentro de um for …Próxima loop. Cada iteração de para cada corpo de instrução em Main cria uma chamada para o Power função do iterador. Cada chamada para a função de iterador passa para a próxima execução do 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

O exemplo a seguir demonstra uma Get o acessador é um iterador. O Iterator é modificador na declaração da 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 exemplos adicionais, consulte Iteradores (C# e Visual Basic).

Consulte também

Referência

Instrução Yield (Visual Basic)

IteratorStateMachineAttribute

Outros recursos

Iteradores (C# e Visual Basic)