ReSharper通常表明我,我仍然在寻找一个很好的理由为什么要这样做。我应该声明变量尽可能接近它们将被使用的范围吗?
是来到我心中唯一的事情是,它声明接近将要使用的范围,可避免在某些情况下,没有必要对其进行初始化(因为条件等)
与相关的东西如下:
int temp;
foreach (var x in collection) {
temp = x.GetValue();
//Do something with temp
}
是真的不同于
foreach (var x in collection) {
int temp = x.GetValue();
//...
}
我的意思是,是不是第二个代码更加昂贵,因为它被分配记忆每次?或者都是一样的?当然,在完成循环之后,在第二个代码中,垃圾收集器将关注temp
变量,但不在第一个代码中。
那么这两个代码之间没有任何性能差异? (它是一个'int',但它可能是一个更复杂的类,它将需要更多空间在内存中......) – 2011-05-26 04:22:22
@Oscar - 除了最小的初始化成本之外,堆栈变量基本上是免费的。 – 2011-05-26 04:25:08
无论如何,编译器可能会将在循环外声明的变量移动到循环之外,所以不,实际上没有任何性能差异。通过在需要它们的范围的开始处声明它们来获得可读性和可维护性。 – 2011-05-26 04:25:17