我在代码中犯了一个有趣的错误:
Dim endColumn As Integer = startColumn + endColumn - 1
实际上代码应该是:
Dim endColumn As Integer = startColumn + numColumns - 1
有趣的是,我认为这段代码应该是递归的并且无限循环,因为endColumn类型的初始化调用本身。但是,似乎代码只是将未初始化的变量视为0,因此我得到startColumn + 0 - 1
。幕后发生了什么?变量何时被赋予默认值?
答案 0 :(得分:6)
变量未初始化。
执行步骤1:Dim endColumn As Integer
Integer
的默认值为0,因此此时endColumn = 0。
执行步骤2:startColumn + endColumn - 1
由于步骤1中的endColumn = 0,因此这是使用的值。
答案 1 :(得分:6)
spec说:
在执行任何变量初始值设定项之前,所有变量都被初始化为其类型的默认值。
答案 2 :(得分:-1)
这里根本没有递归。读取变量永远不会导致递归。在最坏的情况下,我可以看到编译器在尝试在其初始化子句中使用变量时抛出错误,但显然它没有,或者你不能在第一种情况下编译。