2012-09-18 69 views
6

這是我的代碼:錯誤嵌入式報表

if (RdoBtnBeepDefault.Checked) SystemSounds.Beep.Play(); 
else SoundPlayer iPlay = new SoundPlayer(@TxtBeepFile.Text); 

iPlay.Play(); 

而這裏的錯誤:

Embedded statement cannot be a declaration or labeled statement

如果這是不可能的,能告訴我怎麼?

+2

錯誤是因爲除非使用'{大括號}',否則您不能在單個語句if/else中聲明變量('iPlay')。 (我認爲語言是爲避免範圍模糊而設計的......) – Cameron

回答

9

iPlay.Play();超出了您的if-else聲明中您的else子句的範圍。嘗試使用大括號括住多行範圍。

if (RdoBtnBeepDefault.Checked) 
{ 
    SystemSounds.Beep.Play(); 
) 
else 
{ 
    SoundPlayer iPlay = new SoundPlayer(TxtBeepFile.Text); 
    iPlay.Play(); 
) 
+0

這是我建議你總是使用大括號即使只用一行的最大原因**。 –

+1

@PreetSangha即使我對每個if-else子句都有一行,我用它把它括在大括號中。 :D我不知道爲什麼我無法阻止自己這樣做......嘿, –

3

不僅如此,即使這可以產生相同的誤差

if (RdoBtnBeepDefault.Checked) SystemSounds.Beep.Play(); 
else int i=0; 

原因是邏輯。如果您在if條件中放入單行語句,則間接意味着條件流以該行結束。在這種情況下,如果您使用某些聲明||如上所述,這將不會以任何方式理解/影響,那意味着它是一種字符串文字。這並非完全錯誤,而是不必要的。 Mind c#visual studio編輯器可以減少幾乎所有可能的錯誤和不必要的內存加載。

當你使用大括號時,它表示你可能會在同一個塊內使用該變量來獲得某些邏輯。所以編輯會允許你這樣做。當時VS假設你可以在將來添加代碼。所以它只會給你關於該行的警告。沒有大括號,它堅定地認爲你不打算使用該變量(由於範圍)。所以,它將這作爲錯誤。