Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Spécifie qu’une fonction ou Get
un accesseur est un itérateur.
Remarques
Un itérateur effectue une itération personnalisée sur une collection. Un itérateur utilise l’instruction Yield pour renvoyer chaque élément de la collection un par un. Lorsqu’une Yield
instruction est atteinte, l’emplacement actuel dans le code est conservé. L’exécution est redémarrée à partir de cet emplacement la prochaine fois que la fonction itérateur est appelée.
Un itérateur peut être implémenté en tant que fonction ou en tant qu’accesseur Get
d’une définition de propriété. Le Iterator
modificateur apparaît dans la déclaration de la fonction itérateur ou Get
de l’accesseur.
Vous appelez un itérateur à partir du code client à l’aide d’un for Each... Instruction suivante.
Le type de retour d’une fonction itérateur ou Get
d’un accesseur peut être IEnumerable, , IEnumerable<T>ou IEnumeratorIEnumerator<T>.
Un itérateur ne peut pas avoir de ByRef
paramètres.
Un itérateur ne peut pas se produire 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 Iterator
modificateur peut être utilisé dans ces contextes :
Exemple 1
L’exemple suivant illustre une fonction d’itérateur. La fonction itérateur a une Yield
instruction qui se trouve à l’intérieur d’un For... Boucle suivante . Chaque itération du corps de l’instruction For Each crée Main
un appel à la Power
fonction itérateur. Chaque appel à la fonction itérateur passe à l’exécution suivante de l’instruction Yield
, qui se produit pendant l’itération suivante de la For…Next
boucle.
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 Get
accesseur qui est un itérateur. Le Iterator
modificateur 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 obtenir des exemples supplémentaires, consultez Itérateurs.