Itérateur (Visual Basic)
Spécifie qu’une fonction ou un accesseur Get
est un itérateur.
Notes
Un itérateur effectue une itération personnalisée sur une collection. Un itérateur utilise l’instruction Yield pour retourner chaque élément dans la collection un par un. Quand une instruction Yield
est atteinte, l’emplacement actif dans le code est conservé. L'exécution redémarrera à partir de cet emplacement la prochaine fois que la fonction d'itérateur sera appelée.
Un itérateur peut être implémenté en tant que fonction ou accesseur Get
d’une définition de propriété. Le modificateur Iterator
apparaît dans la déclaration de la fonction d’itérateur ou de l’accesseur Get
.
Vous appelez un itérateur depuis le code client en utilisant une instruction For Each...Next.
Le type de retour d’une fonction d’itérateur ou de l’accesseur Get
peut être IEnumerable, IEnumerable<T>, IEnumerator ou IEnumerator<T>.
Un itérateur ne peut pas avoir de paramètres ByRef
.
Un itérateur ne peut pas être présent dans un événement, un constructeur d’instance, un constructeur statique ou un destructeur statique.
Un itérateur peut être une fonction anonyme. Pour plus d'informations, consultez Itérateurs.
Utilisation
Le modificateur Iterator
peut être utilisé dans les contextes suivants :
Exemple 1
L’exemple suivant illustre une fonction d’itérateur. La fonction d’itérateur a une instruction Yield
qui se trouve à l’intérieur d’une boucle For…Next. Chaque itération du corps d’instruction For Each dans Main
crée un appel à la fonction d’itérateur Power
. Chaque appel à la fonction d'itérateur continue vers l'exécution suivante de l'instruction Yield
, qui se produit pendant l'itération suivante de la boucle 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
Exemple 2
L'exemple suivant illustre un accesseur Get
qui est un itérateur. Le modificateur Iterator
se trouve dans la déclaration de propriété.
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
Pour plus d’exemples, consultez Itérateurs.