Compartir a través de


Iterador (Visual Basic)

Especifica que una función o un descriptor de Get es un iterador.

Comentarios

Un iterador realiza una iteración personalizada en una colección. Un iterador utiliza la instrucción de producción para devolver todos los elementos de la colección de uno en uno. Cuando se alcanza una instrucción de Yield , la ubicación actual en el código se conserva. La ejecución se reinicia desde esa ubicación la próxima vez que la función de iterador se denomina.

Un iterador se puede implementar como función o como descriptor de Get de una definición de propiedad. El modificador de Iterator aparece en la declaración de la función de iterador o de descriptor de acceso Get .

Se llama a un iterador de código de cliente mediante Instrucción For Each...Next (Visual Basic).

Tipo de valor devuelto de una función de iterador o el descriptor de Get puede ser IEnumerable, IEnumerable, IEnumerator, o IEnumerator.

Un iterador no puede tener ningún parámetro de ByRef .

Un iterador no puede aparecer en un evento, un constructor de instancia, un constructor estático, o destructor estático.

Un iterador puede ser una función anónima. Para obtener más información, vea Iteradores (C# y Visual Basic).

Para obtener más información sobre los iteradores, vea Iteradores (C# y Visual Basic).

Uso

El modificador Iterator se puede utilizar en estos contextos:

Ejemplo

El ejemplo siguiente se muestra una función de iterador. La función de iterador tiene una instrucción de Yield que está dentro de un bucle de For… Next . Cada iteración del cuerpo de instrucción de For Each en Main crea una llamada a la función de iterador de Power . Cada llamada a la función de iterador continúa a la ejecución siguiente de la instrucción de Yield , que durante la siguiente iteración del bucle de For…Next .

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

El ejemplo siguiente se muestra un descriptor de acceso de Get que sea un iterador. El modificador de Iterator está en la declaración de propiedad.

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 obtener otros ejemplos, vea Iteradores (C# y Visual Basic).

Vea también

Referencia

Yield (Instrucción) (Visual Basic)

IteratorStateMachineAttribute

Otros recursos

Iteradores (C# y Visual Basic)