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