对于条件VB.NET与C#

ser*_*hio 16 .net c# vb.net

C#:

static class Module1
{     
    public static void Main()
    {    
        for (index = 1; index <= GetCount(); index++) {
            Console.WriteLine("For {0}", index);
        }
        Console.ReadKey();
    }

    public static int GetCount()
    {
        Console.WriteLine("GetCount");
        return 10;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果(C#重新检查条件):

GetCount
For 1
GetCount
For 2
GetCount
For 3
GetCount
For 4
GetCount
For 5
GetCount
For 6
GetCount
For 7
GetCount
For 8
GetCount
For 9
GetCount
For 10
GetCount
Run Code Online (Sandbox Code Playgroud)

VB.NET

Module Module1    
  Sub Main()
    For index = 1 To GetCount()
      Console.WriteLine("For {0}", index)
    Next
    Console.ReadKey()
  End Sub

  Public Function GetCount() As Integer
    Console.WriteLine("GetCount")
    Return 10
  End Function
End Module
Run Code Online (Sandbox Code Playgroud)

结果(VB.NET不重新检查条件):

GetCount
For 1
For 2
For 3
For 4
For 5
For 6
For 7
For 8
For 9
For 10
Run Code Online (Sandbox Code Playgroud)

a)为什么 VB.NET不遵循每次迭代重新检查For条件的"规则"?
b)有没有办法强制 VB重新检查这种情况?

Aak*_*shM 11

C#和VB.NET是不同的语言,类似的关键字可以有不同的语义.

来自(我的重点)的文档For ... Next:

For...Next循环开始时,Visual Basic评估start,endstep.这是它评估这些值的唯一时间.

从C#规范的第8.8.3节(同上):

当控制到达嵌入语句的结束点时(可能来自执行continue语句),for-iterator的表达式(如果有的话)按顺序计算,然后执行另一次迭代,从评估在上面的步骤中的条件.

如果您确实希望每次都强制检查条件,VB.NET提供极其灵活的Do ...循环,它可以具有While until条件,在循环的开始结束时运行.这种说法,循环条件评估每次轮.