Iterador (Visual Basic)Iterator (Visual Basic)

Especifica que una función o un descriptor de acceso Get es un iterador.Specifies that a function or Get accessor is an iterator.

ComentariosRemarks

Un iterador realiza una iteración personalizada en una colección.An iterator performs a custom iteration over a collection. Un iterador usa la instrucción yield para devolver cada elemento de la colección de uno en uno.An iterator uses the Yield statement to return each element in the collection one at a time. Cuando se alcanza una instrucción Yield, se conserva la ubicación actual en el código.When a Yield statement is reached, the current location in code is retained. La ejecución se reinicia desde esa ubicación la próxima vez que se llama a la función del iterador.Execution is restarted from that location the next time that the iterator function is called.

Un iterador se puede implementar como una función o como Get descriptor de acceso de una definición de propiedad.An iterator can be implemented as a function or as a Get accessor of a property definition. El modificador Iterator aparece en la declaración de la función de iterador o de Get descriptor de acceso.The Iterator modifier appears in the declaration of the iterator function or Get accessor.

Se llama a un iterador desde el código de cliente mediante un método for each... Instrucción siguiente.You call an iterator from client code by using a For Each...Next Statement.

El tipo de valor devuelto de una función de iterador o Get descriptor de acceso puede ser IEnumerable, IEnumerable<T>, IEnumeratoro IEnumerator<T>.The return type of an iterator function or Get accessor can be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

Un iterador no puede tener ningún parámetro ByRef.An iterator cannot have any ByRef parameters.

Un iterador no puede aparecer en un evento, un constructor de instancia, un constructor estático o un destructor estático.An iterator cannot occur in an event, instance constructor, static constructor, or static destructor.

Un iterador puede ser una función anónima.An iterator can be an anonymous function. Para obtener más información, consulta Iteradores.For more information, see Iterators.

UsoUsage

El modificador Iterator se puede utilizar en los contextos siguientes:The Iterator modifier can be used in these contexts:

EjemploExample

En el ejemplo siguiente se muestra una función de iterador.The following example demonstrates an iterator function. La función de iterador tiene una instrucción Yield que está dentro de un ... Siguiente bucle.The iterator function has a Yield statement that is inside a For…Next loop. Cada iteración del cuerpo de la instrucción for each en Main crea una llamada a la función de iterador Power.Each iteration of the For Each statement body in Main creates a call to the Power iterator function. 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.Each call to the iterator function proceeds to the next execution of the Yield statement, which occurs during the next iteration of the 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

EjemploExample

En el ejemplo siguiente se muestra un descriptor de acceso Get que es un iterador.The following example demonstrates a Get accessor that is an iterator. El modificador Iterator está en la declaración de propiedad.The Iterator modifier is in the property declaration.

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 más ejemplos, vea iteradores.For additional examples, see Iterators.

Vea tambiénSee also