「プログラマは言語に拘るな」から「複数の言語を知った方がいいよ」にトーンダウンしました。(諸般の事情により..って単なる変節なんですがwww)
開発者が「バグだバクだ」と騒いでいました。
ループ回数が、想定したように回らないそうです。
For 初期 to 終了
処理
next
単純なLoop....バグる要素も無い位です。
「Loopか、10回しか回らないのはバグだ」と言うのです。よくみたら、Loop内で、終了判定の値を更新している。 (実際は DBから取得した結果の値で変えているのですが)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim max As Integer = 10
For i As Integer = 0 To max
For i As integer = 0 To max - 1
If i = 5 Then max = 40
Debug.Print("i=" + i.ToString())
Next
End Sub
バグ以前の問題として、Loop内で終了条件を触る設計は不作法でダメジャンと思います。がそこは目を瞑るとして。
終了条件の評価のタイミングを誤解しているようです。 VBのFor文は、Loop最初に終了値が評価され、確定されます。よって10回しか回りません。
しかしC#では、終了条件の判定は、Loopの度にされます。よって40回回ります。
int max = 10;
for (int i = 0; i < max; i++)
{
if (i == 5) max = 40;
Console.WriteLine(i.ToString() + ":max:" + max.ToString());
}
バグではなく、言語仕様です、Loop処理は言語の基本要件なのですが、挙動に差があるので、このような、終了条件の操作は、すべきでないと思ってます。
上記のような単純なソースの場合、バグだと騒ぐのではなく、動作確認して、挙動差を、確認して欲しいものです。
この特性を生かして(?)意図時にトリッキーなコーディングする局面もありすが、業務アプリでは不可としてます。
確認用のサンプルを 試行部屋につくりました。
http://www.ognogn.com/KOMONO/COMPILE/VB_AND_CS.aspx?Loop_ForLoop_EndEval