La boucle For Each dans Visual Basic est destinée à parcourir séquentiellement tous les éléments d'une collection ou d'un tableau. Son utilisation simplifie le travail avec des objets énumérables (Collection, Array, listes, etc.), sans nécessiter un accès explicite aux indices.
Syntaxe :
For Each element As DataType In collection ' Actions avec element Next
Différences avec d'autres boucles :
For — nécessite de spécifier un compteur et une plage, efficace lorsqu'un accès aux éléments par indice est nécessaire.While — s'exécute tant que la condition est vraie, adapté pour des quantités d'itérations imprévisibles.For Each — itère sur tous les éléments sans accès aux indices, convenant aux collections modernes.Limitations et caractéristiques de For Each :
Exemple :
Dim items As New List(Of Integer)({1, 2, 3}) For Each item As Integer In items Console.WriteLine(item) Next
Essayer de modifier la collection à l'intérieur de la boucle peut provoquer une erreur :
For Each item As Integer In items If item = 2 Then items.Remove(item) ' Exception ! End If Next
Peut-on modifier les éléments de la collection par valeur en utilisant For Each, si les éléments sont des structures ?
Non, si les éléments de la collection sont des structures (types valeur), alors la variable d'itération dans For Each contient une copie de la valeur. Toute modification de la variable n'affectera pas l'élément réel de la collection. Par exemple :
Structure Point Public X As Integer End Structure Dim points As New List(Of Point)({New Point With {.X = 1}}) For Each pt In points pt.X = 100 ' Ne modifie pas points(0).X Next
Histoire
Dans le projet, on utilisait For Each pour modifier les champs des structures des employés. L'itération ne modifiait pas les données d'origine, car l'objet d'itération était une copie et non l'élément lui-même de la collection. En raison de cela, la mise à jour des salaires ne s'effectuait pas.
Histoire
Lors de la traversée d'une liste dans For Each, des éléments étaient supprimés à l'intérieur de la condition - en conséquence, l'application lançait InvalidOperationException et se terminait de manière abrupte.
Histoire
Le parcours de la collection via For Each sans tenir compte de sa mutabilité a conduit à une boucle infinie, lorsque une source de données externe remplissait cette collection en même temps qu'elle était lue, provoquant des erreurs logiques dans les calculs.