ProgrammationDéveloppeur VB.NET

Comment la gestion des boucles For et For Each est-elle implémentée en Visual Basic, dans quels cas choisir l'une ou l'autre boucle, et quelles erreurs surviennent souvent lors du travail avec des collections ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

En Visual Basic, il existe des boucles For et For Each, chacune adaptée à des tâches spécifiques.

Historique de la question

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.

Problème

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.

Solution

Utilisez un For ordinaire lorsque :

  • un index d'élément est nécessaire
  • il est nécessaire de modifier les éléments du tableau par index
  • une itération sur une plage de nombres est requise

Appliquez For Each lorsque :

  • seule la valeur de chaque élément est importante
  • la structure de la collection est inconnue à l'avance
  • l'élégance et la minimisation des erreurs sont requises

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 :

  • For est utilisé pour travailler avec des index
  • Il est impossible de modifier la collection elle-même à l'intérieur de la boucle For Each
  • For Each est universel pour tout objet IEnumerable

Questions piégeuses.

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.

Erreurs typiques et anti-patterns

  • Modifier la collection pendant For Each
  • Confondre les index lors de l'utilisation de For ordinaire avec des tableaux et des collections
  • Utiliser For Each lorsque l'index d'un élément est nécessaire

Exemple de la vie réelle

** 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 :

  • Code simple pour lire la collection

Inconvénients :

  • Le programme se termine de manière inattendue

** 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 :

  • Pas d'erreurs d'itération, tous les éléments nécessaires sont supprimés

Inconvénients :

  • Nécessite plus de code et une compréhension de la structure des données