Iterador (Visual Basic)

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

Comentarios

Un iterador realiza una iteración personalizada en una colección. Un iterador usa la instrucción Yield para devolver cada elemento de la colección a la vez. Cuando se alcanza una instrucción Yield, se retiene la ubicación actual en el código. La ejecución se reinicia desde esa ubicación la próxima vez que se llama a la función del iterador.

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

Llame a un iterador a partir del código de cliente mediante una instrucción For Each...Next.

El tipo de valor devuelto de una función de iterador o descriptor de acceso Get puede ser IEnumerable, IEnumerable<T>, IEnumerator o IEnumerator<T>.

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

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

Un iterador puede ser una función anónima. Para obtener más información, consulta Iteradores.

Uso

El modificador Iterator se puede utilizar en los contextos siguientes:

Ejemplo 1

En el siguiente ejemplo se muestra el uso de una función de iterador. La función de iterador tiene una instrucción Yield que está dentro de un bucle For...Next. Cada iteración del cuerpo de instrucción For Each en Main crea una llamada a la función de iterador Power. Cada llamada a la función de iterador prosigue con la siguiente ejecución de la instrucción Yield, que se produce durante la siguiente iteración del bucle 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

Ejemplo 2

En el ejemplo siguiente se muestra un descriptor de acceso Get que es un iterador. El modificador 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.

Consulte también