Partager via


Itérateur (Visual Basic)

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.

Voir aussi