未初始化的整数不会在循环的每次迭代中重置

时间:2019-06-17 06:29:12

标签: vb.net for-loop

问题

我正在测试以下简单的VB.Net代码:

  For i = 0 To 5
     Dim f As Integer
     If i = 3 Then
        f = 1
     End If
     Debug.WriteLine(f)
  Next

,输出如下:

0
0
0
1
1
1

但是我期望:

0
0
0
1
0
0

解决方案

解决问题的简单方法是将Dim f As Integer替换为Dim f As Integer = 0

问题

这是预期的行为吗?如果是,为什么?

1 个答案:

答案 0 :(得分:3)

这在Visual Basic Programming Guide中有记录:

  

即使变量的作用域仅限于块,其寿命仍然是整个过程的寿命。如果在过程中多次输入该块,则每个块变量将保留其先前的值。为了避免在这种情况下出现意外结果,明智的做法是在块的开头初始化块变量。

这恰好描述了您所看到的行为。

我不知道为什么为什么是按这种方式设计的-我更喜欢一种语言,它不允许您在没有明确赋值的情况下使用变量-但我不会令人惊讶的是,这只是历史和现阶段向后兼容的问题。