2012-09-18 12 views
6

Questo è il mio codice:errore con istruzioni incorporate

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

iPlay.Play(); 

Ed ecco l'errore:

Embedded statement cannot be a declaration or labeled statement

Se ciò non fosse possibile, la mente mi dice come?

+2

L'errore è dovuto al fatto che non è possibile dichiarare una variabile ('iPlay') in una singola istruzione se/else, a meno che non si utilizzi' {parentesi} '. (Penso che il linguaggio sia stato progettato in questo modo per evitare ambiguità ...) – Cameron

risposta

9

iPlay.Play(); non rientra nell'ambito della clausola else nell'istruzione if-else. Prova a racchiuderlo con le parentesi per più scope.

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

Questa è la ragione principale per cui ti suggerirei ** di usare sempre le parentesi anche con una linea **. –

+1

@PreetSangha anche se ho una riga per ogni clausola if-else, ho usato per racchiuderla in parentesi graffe. : D Non so perché non riesco a trattenermi dal farlo .. hhehe –

3

Non solo che anche questo può produrre lo stesso errore

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

La ragione è logica. Se si inserisce un'istruzione a riga singola in una condizione if else che indica indirettamente che il flusso condizionale termina con tale riga. In tal caso se si usa qualche dichiarazione || qualcosa come sopra che non ha senso/impatto in alcun modo, allora significa che è una specie di stringa letterale. Non è esattamente sbagliato, anzi è inutile. Mind C# visual studio editor riduce quasi tutti gli errori possibili e il caricamento di memoria non necessario.

Quando si inseriscono le parentesi, è indubbio che è possibile utilizzare tale variabile all'interno dello stesso blocco per un po 'di logica. Quindi l'editore ti permetterà di farlo. In quel momento il VS presume che tu possa aggiungere il codice in futuro. Quindi ti darà solo un avvertimento su quella linea. Senza parentesi, si presume che non si userà quella variabile (a causa dell'ambito). Quindi, lo considera come errore.

Problemi correlati