循环内部的VB.Net初始化

时间:2014-06-06 06:48:11

标签: vb.net

CODE1

while
    dim number as integer = 0
    'some code here
end while

码2

dim number as integer
while 
     number = 0
    'some code here
end while 

代码1和代码2在速度方面有何不同? 他们还有什么区别? 使用的最佳做法是什么?谢谢

3 个答案:

答案 0 :(得分:4)

在代码1中,变量的范围被约束为while - 块。

在代码2中,变量的范围超出了while - 块。例如,如果在函数中定义while块,则变量的范围是整个函数。

如果在多个块中有相同的变量,则可以注意到区别:

while
    dim number as integer = 0

    x = number // x is 0
    number = 1
end while

while
    dim number as integer = 0

    x = number // x is 0
end while

此代码很好,如下所示

dim number as integer = 0
while
    x = number // x is 0
    number = 1
end while

while
    x = number // x is 1
end while

两种方式都很好。说到性能 - 不在乎,如果你需要提高代码的性能,你很可能需要触摸不同的地方。因此,这类事情通常被称为“微观优化”。

说到练习,通常最好将变量定义为尽可能接近其使用。因此,如果您只需要在while循环中使用变量(及其状态),请在那里定义它。如果需要读取while循环后的值,请在外部定义。如果您使用像ReSharper这样的工具,它甚至会建议您将定义移动到内部范围(此处为while循环),如果您将其放在外面并且之后不使用它。

答案 1 :(得分:2)

两种方法的速度应该没有区别。编译器会为您优化这一点。您可以使用IL检查生成的Ildasm.exe代码。

"最佳实践"是使用smallest possible scope,即代码2。

答案 2 :(得分:0)

你不应该关心这两者之间的速度差异。它会非常小(如果有的话)。

其他差异?第二个代码会在number循环后访问while,这可能是您想要的,也可能不是。

一般规则:将变量保持在尽可能小的范围内,这意味着如果您只需要循环内的变量,则在循环内声明它。如果你需要在循环结束时可以访问它的值,请在循环之前声明它。