我一直想知道爲什麼在C#中使用以前在子範圍中使用的變量名稱是不允許的。就像這樣:使用在子範圍中使用的變量名稱
if (true)
{
int i = 1;
}
int i = 2;
編譯上面的代碼產生一個錯誤:
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
可是你不能使用兒童範圍內定義任何變量。上面的代碼在Java中工作得很好,我也沒有看到爲什麼它不在C#中。我確定有一個很好的理由,但它是什麼?
我其實認爲會有一個「真正」的原因,因爲我真的不明白爲什麼會有人做出這樣的選擇。 :D但是我確實看到了這一點,很高興知道原因。 – Carlos 2010-01-13 19:21:20
khilon:我真的認爲真正的原因是我所建議的;^_^ – Toad 2010-01-13 19:22:46
@Carlos fyi,_real_的原因是所有變量聲明都在某個時間點(編譯或JIT)移動到其範圍的頂部。因此,您的範圍與您的聲明有關的排序很少,在運行時,子/祖範圍衝突永遠是衝突。編譯器提前拒絕它。 – Gusdor 2014-12-12 12:11:14