2012-03-15 147 views
0

可能重複:
Variable declarations following if statements
Why this compile errorC#錯誤if語句

我收到錯誤「嵌入語句不能聲明或標記語句」,因爲我在沒有括號的if語句後面有一個變量聲明。無論如何,這是背景,這使我想到了這一點。

下面的代碼是非法的

if (true) int i = 7; 

但是,如果包裹在括號中,它的所有法律。

if (true){ int i = 7;} 

這兩段代碼都沒有用。然而第二個是確定的。這個行爲的具體解釋是什麼?

回答

1

因爲你聲明一個變量意味着你正在創建一個語句。語句塊必須放在括號{}中。在這裏你可以閱讀更多關於Statements

2

第一個版本沒有表達語句,只是後面的聲明,但如果需要一個語句來跟着它。

第二個版本有一個聲明。一對{}括號已經是一個語句,即使它是空的(該聲明不再被視爲一個語句)。

1

這兩段代碼都沒有用。

編譯器不能檢查有用,它只能檢查確定的「聯合國有用」:
如果您將在第二個使用該變量,可以將可能有意義。

但是,在第一個示例中,不能使用變量i,因爲它已經超出了下一行的範圍 - 您沒有機會再添加一條使得該聲明有用的行。

儘管如此,第二個應該會生成一個警告,如「變量i已分配,但其值永遠不會被使用」。

0

以非常通用的方式解釋:這是因爲括號中的編譯器「假設」它使用了。

如果沒有括號,則可以使用初始化後的變量。在括號內,相反,可以。

看到極好的Skeet回答我的問題和Eric Lippert的評論也。

1

未包含在括號內的嵌入式語句不能是聲明語句或帶標籤的語句。有關更多詳細信息,請訪問http://msdn.microsoft.com/en-us/library/ms173143.aspx

除此之外,如果您聲明瞭變量並且在此之後,條件結束並且變量作用域結束。所以編譯器會給出錯誤是有道理的。如果使用{},編譯器將假定您將在'{'和'}'之間使用此變量。