Partager via


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.

Voir aussi