我正在测试以下简单的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
这是预期的行为吗?如果是,为什么?
答案 0 :(得分:3)
这在Visual Basic Programming Guide中有记录:
即使变量的作用域仅限于块,其寿命仍然是整个过程的寿命。如果在过程中多次输入该块,则每个块变量将保留其先前的值。为了避免在这种情况下出现意外结果,明智的做法是在块的开头初始化块变量。
这恰好描述了您所看到的行为。
我不知道为什么为什么是按这种方式设计的-我更喜欢一种语言,它不允许您在没有明确赋值的情况下使用变量-但我不会令人惊讶的是,这只是历史和现阶段向后兼容的问题。