2011-03-08 260 views
1

以下代碼是否正確?C#:循環內部的變量聲明

foreach (int i in MyList) 
{ 
    MyObject m; 
} 

你可以多次聲明一個變量嗎?

+3

定義「不止一次」。如果它不在函數中,可以定義它,讓局部範圍覆蓋更多的全局範圍。但是,MyObject myObj; for(...){MyObject myObj}'不起作用。 – 2011-03-08 04:57:58

回答

2

您不會多次聲明它。變量有一個「範圍」,並且m變量的範圍在下一次迭代之前結束於}

+2

前方12秒! StackOverflow確實迫使我打破了我的打字速度! – 2011-03-08 04:59:54

+0

+1提到的範圍。我也在同一線路上回答。 – Pradeep 2011-03-08 05:02:12

-1

您可以在循環中聲明一個變量。如果僅在循環內部需要它,則代碼可讀性更好。它可能會對性能造成不利影響,但如果所討論的變量聲明和實例化的成本很高,或者您的列表非常大,則只需要擔心。

+1

請給出兩個具有相同語義的循環,其中一個是在循環內聲明變量,另一個是在循環外部聲明它,兩個循環之間的性能明顯不同。 – jason 2011-03-08 05:13:00

+0

@Jason - 這就是我提到性能問題的原因。也許你可以讓我們知道在循環內部聲明一個變量導致*真實世界*性能問題時,一個微不足道的循環必須運行多少次迭代。 – jlnorsworthy 2011-03-08 05:26:41

+0

@jnnorsworthy:等等,你說那可能會損害表現。我的說法是,這不是,我正在挑戰你證明我錯了。 – jason 2011-03-08 05:31:12

0

是的。

如果我正確地記住了我的C#,那麼在執行時,它只會被聲明一次,但變量會被重用直到範圍的末尾(而不是每個循環的結尾)。