2011-03-31 48 views
4

可能重複:
C# Variable ScopingC#:爲什麼這個變量在範圍內並且不在同一時間範圍之內?

我碰到的東西我從來沒有遇到過。 因爲我知道如何解決它,所以我不在尋找修復程序。我想知道的是編譯器正在做什麼。這僅僅是示例代碼:

if (true) 
{ 
    int x = 0; 
} 
int x = 0; 

該代碼產生錯誤「局部變量‘X’不能在此範圍內聲明,因爲它會給予不同的意義,‘X’」。

然而,我的代碼改成這樣:

if (true) 
{ 
    int x = 0; 
} 
x = 0; 

我得到錯誤「無法解析的符號‘X’」。

那麼,這是怎麼回事? x是如何在範圍之內和超出範圍的?

+0

我以前就注意到了這一點,並對此感到好奇。我個人很驚訝第一個不編譯,而第二個編譯不應該是正確的。 – 2011-03-31 16:46:25

回答

5

變量的作用域是聲明它的整個塊。但是,您不能請參閱它直到的聲明。

Eric Lippert有一個blog post對此進行了更詳細的介紹。編輯:正如埃裏克指出,another one ...

+0

你可以把他們指向他的相關答案:o)http://stackoverflow.com/questions/2049330/c-variable-scoping/2050864#2050864 – 2011-03-31 16:46:22

+0

@Matthew:我知道有一篇博客文章,我不知道Eric已經回答了一個SO問題。 – 2011-03-31 16:48:44

+0

起初我也沒有,但我知道我之前看到過這個問題。 – 2011-03-31 16:52:40

0

它不是,只是因爲C#允許你聲明/隨時隨地在程序中定義的變量的範圍是在聲明它ANS所以它是整個區塊使x預先/ /(在範圍內)爲xif

相關問題