我应该声明变量尽可能接近它们将被使用的范围吗?

Osc*_*ros 6 c# variables scope

ReSharper通常会告诉我这一点,而且我仍然在寻找为什么这样做的充分理由.

我想到的唯一一件事就是声明它更接近它将使用的范围,可以避免在某些不需要的情况下初始化它(因为条件等)

与此相关的事情如下:

int temp;
foreach (var x in collection) { 
    temp = x.GetValue();
    //Do something with temp
}
Run Code Online (Sandbox Code Playgroud)

这真的不同于

foreach (var x in collection) {
    int temp = x.GetValue();
    //...
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,第二个代码不是更昂贵,因为它每次都在分配内存吗?或两者都一样?当然,在完成循环之后,在第二个代码中垃圾收集器将关注temp变量,但不是在第一个...

Khe*_*pri 6

声明尽可能接近使用是一个可读性决定.您的示例不显示它,但是在较长的方法中,很难筛选代码来查找临时变量.

这也是一种重构优势.声明更接近源会导致以后更容易重构.


Cᴏʀ*_*ᴏʀʏ 5

第二个例子的成本可以忽略不计.唯一的区别是,在第一个示例中,temp将在for循环范围之外可用,因此它将比在for循环内声明它的时间更长.

如果您不需要 tempfor循环之外,则不应在该循环之外声明它.就像其他人所说的那样,可读性和风格在这里比性能和记忆更有效.