Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Especifica que una función o Get descriptor de acceso es un iterador.
Observaciones
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 uno a uno. Cuando se alcanza una Yield instrucción , se conserva la ubicación actual en el código. La ejecución se reinicia desde esa ubicación la próxima vez que se llame a la función iterador.
Un iterador se puede implementar como una función o como descriptor Get de acceso de una definición de propiedad. El Iterator modificador aparece en la declaración de la función o Get descriptor de acceso del iterador.
Se llama a un iterador desde el código de cliente mediante un for each... Siguiente instrucción.
El tipo de valor devuelto de una función de iterador o Get descriptor de acceso puede ser IEnumerable, IEnumerable<T>, IEnumeratoro IEnumerator<T>.
Un iterador no puede tener ningún ByRef parámetro.
Un iterador no puede utilizarse 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 más información, consulta Iteradores.
Uso
El Iterator modificador se puede usar en estos contextos:
Ejemplo 1
En el ejemplo siguiente se muestra una función de iterador. La función de iterador tiene una Yield instrucción que está dentro de un for... Bucle siguiente . Cada iteración del cuerpo de la instrucción For Each de Main crea una llamada a la Power función iterador. Cada llamada a la función iterador continúa con la siguiente ejecución de la Yield instrucción , que se produce durante la siguiente iteración del For…Next bucle.
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 Get descriptor de acceso que es un iterador. El Iterator modificador 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 ejemplos adicionales, consulte Iteradores.