Why does a for loop behave differently when migrating VB.NET code to C#?

In C#, the loop boundary condition is evaluated on each iteration. In VB.NET, it is only evaluated on entry to the loop.

So, in the C# version in the question, because the length of stringValue is being changed in the loop, the final loop variable value will be changed.

In VB.NET, the final condition is inclusive, so you would use <= instead of < in C#.

The end condition evaluation in C# has the corollary that even if it doesn’t vary but it is expensive to calculate, then it should be calculated just once before the loop.

Leave a Comment