En Visual Basic, il existe des boucles For et For Each, chacune adaptée à des tâches spécifiques.
VB6 et le classique Visual Basic ne prenaient en charge que les boucles de plage (For ... Next). Dans les versions ultérieures (à partir de VB6 et VB.NET), For Each est apparu, permettant de parcourir élégamment les éléments des collections et des tableaux.
Le principal problème est le choix incorrect du type de boucle et la tentative de modifier la collection à l'intérieur de For Each, ce qui entraîne des erreurs d'exécution.
Utilisez un For ordinaire lorsque :
Appliquez For Each lorsque :
Exemple de code :
' Parcourir les éléments avec modification Dim arr() As Integer = {1, 2, 3} For i As Integer = 0 To arr.Length - 1 arr(i) = arr(i) * 2 Next ' Lecture uniquement de la collection Dim list As New List(Of String) From {"one", "two", "three"} For Each s As String In list Console.WriteLine(s) Next
Caractéristiques clés :
Peut-on modifier la collection List(Of T) à l'intérieur de For Each ?
Non. Cela entraînera une InvalidOperationException, car la structure de la collection ne doit pas changer pendant l'itération.
Comment sortir correctement de For Each prématurément ?
Utilisez l'instruction Exit For lorsqu'un élément désiré est trouvé.
For Each s In list If s = "two" Then Exit For End If Next
Quelle est la différence de vitesse entre For et For Each pour les tableaux ?
En général, la différence est minimale, mais For peut être un peu plus rapide (surtout pour les tableaux de types primitifs), car il fonctionne directement avec des index, tandis que For Each crée un objet itérateur supplémentaire.
** Cas négatif
Le développeur essaie de supprimer des éléments de List(Of T) à l'intérieur de For Each. Il reçoit une erreur InvalidOperationException lors de l'exécution.
Avantages :
Inconvénients :
** Cas positif
Pour supprimer des éléments, une itération à l'envers est effectuée avec For ordinaire :
For i = list.Count - 1 To 0 Step -1 If list(i) = "two" Then list.RemoveAt(i) End If Next
Avantages :
Inconvénients :