2012-09-18 9 views
6

To jest mój kod:Błąd z wbudowanymi sprawozdania

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

iPlay.Play(); 

A oto błąd:

Embedded statement cannot be a declaration or labeled statement

Jeśli nie jest to możliwe, umysł mówi mi, w jaki sposób?

+2

Błąd polega na tym, że nie można zadeklarować zmiennej ('iPlay') w pojedynczej instrukcji if/else, chyba że użyjesz' {nawiasów klamrowych}. (Myślę, że język został zaprojektowany w taki sposób, aby uniknąć niejasności zakresu ...). – Cameron

Odpowiedz

9

iPlay.Play(); jest poza zakresem Twojej klauzuli else w Twoim oświadczeniu if-else. Spróbuj zamknąć go za pomocą nawiasów klamrowych dla wielu zakresów linii.

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

To jest największy powód, dla którego sugerowałbym, abyś zawsze używał szelek nawet z jedną linią **. –

+1

@PreetSangha, nawet jeśli mam jedną linię dla każdej klauzuli if-else, użyłem do zamknięcia w nawiasach klamrowych. : D Nie wiem, dlaczego nie mogę powstrzymać się od robienia tego .. hhehe –

3

Nie tylko, że nawet ta może produkować ten sam błąd

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

Powodem jest logika. Jeśli umieścisz instrukcję pojedynczego wiersza w warunku else, który pośrednio oznacza, że ​​przepływ warunkowy kończy się na tej linii. W takim przypadku, jeśli użyjesz jakiejś deklaracji || czegoś jak wyżej, które nie ma sensu/wpływu w jakikolwiek sposób, to znaczy, że jest to rodzaj literału ciągłego. Nie jest to dokładnie błędne, a raczej niepotrzebne. Edytor Visual Studio Mind redukuje prawie wszystkie możliwe błędy i niepotrzebne ładowanie pamięci.

Po wstawieniu nawiasów klamrowych wskazuje, że można użyć tej zmiennej w tym samym bloku dla pewnej logiki. Edytor pozwoli ci to zrobić. W tym czasie VS zakłada, że ​​możesz dodać kod w przyszłości. Więc da ci tylko ostrzeżenie o tej linii. Bez nawiasów solidnie zakłada, że ​​nie użyjesz tej zmiennej (ze względu na zakres). Tak, przyjmuje to jako błąd.

Powiązane problemy