23
juin
2007
Le For en VB ne réévalue pas le borne max
juin
2007
Ce n’est pas un scoop, le For VB est différent du for C#. Cependant ce dont je me suis aperçu ce matin c’est que la borne supérieure du For VB n’était pas réévaluée. Du coup, le code suivant :
Dim ints As New List(Of Integer)
[...]
For i As Integer = 0 To ints.Count - 1
If i Mod 2 = 0 Then
ints.RemoveAt(i)
i = i - 1
End If
Next
[...]
For i As Integer = 0 To ints.Count - 1
If i Mod 2 = 0 Then
ints.RemoveAt(i)
i = i - 1
End If
Next
génère une exception. ints.Count - 1
est calculé avant la boucle For et n’est pas réévalué. Comme je supprime des éléments de la liste, il y a un moment où i devient supérieur à ints.Count - 1
. Il faudra donc utiliser un While dans ce cas.