Partager via


Itérateur (Visual Basic)

Spécifie qu'une fonction ou un accesseur d' Get est un itérateur.

Notes

Un itérateur effectue une itération personnalisée sur une collection. Un itérateur utilise l'instruction de rendement pour retourner chaque élément dans la collection un par un. Lorsqu'une instruction d' Yield est atteinte, la position actuelle dans le code est conservée. l'exécution est redémarrée de cet emplacement la prochaine fois que la fonction d'itérateur est appelé.

Un itérateur peut être implémenté en tant que fonction ou comme accesseurs d' Get d'une définition de propriété. Le modificateur d' Iterator apparaît dans la déclaration de la fonction d'itérateur ou de l'accesseur d' Get .

Vous appelez un itérateur de code client à l'aide de For Each...Next, instruction (Visual Basic).

Le type de retour d'une fonction d'itérateur ou d'un accesseur d' Get peut être IEnumerable, IEnumerable, IEnumerator, ou IEnumerator.

Un itérateur ne peut contenir que des paramètres d' ByRef .

Un itérateur ne peut pas apparaître 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 (C# et Visual Basic).

Pour plus d'informations sur les itérateurs, consultez Itérateurs (C# et Visual Basic).

Utilisation

Le modificateur Iterator peut être utilisé dans les contextes suivants :

Exemple

L'exemple suivant illustre une fonction d'itérateur. La fonction d'itérateur a une instruction d' Yield qui est à l'intérieur d'une boucle de Pour… next . Chaque itération du corps du didacticiel de Pour chaque dans Main crée un appel à la fonction d'itérateur d' Power . Chaque appel à la fonction d'itérateur continue à l'exécution suivante de l'instruction d' Yield , qui se produit pendant l'itération suivante de la boucle d' 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

l'exemple suivant montre un accesseur d' Get qui est un itérateur. Le modificateur d' Iterator est 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 d'autres exemples, consultez Itérateurs (C# et Visual Basic).

Voir aussi

Référence

yield, instruction (Visual Basic)

IteratorStateMachineAttribute

Autres ressources

Itérateurs (C# et Visual Basic)