2012-09-18 15 views
6

Este es mi código:de error con instrucciones incrustadas

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

iPlay.Play(); 

Y aquí está el error:

Embedded statement cannot be a declaration or labeled statement

Si eso no es posible, la mente me dice cómo?

+2

El error se debe a que no se puede declarar una variable ('iPlay') en una declaración única if/else, a menos que use' {llaves} '. (Creo que el lenguaje fue diseñado de esa manera para evitar la ambigüedad del alcance ...) – Cameron

Respuesta

9

iPlay.Play(); va más allá del alcance de su cláusula else en su declaración if-else. Intente encerrarlo con llaves para el alcance de varias líneas.

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

Esta es la razón más importante por la que sugeriría que ** siempre use llaves incluso con una línea **. –

+1

@PreetSangha, incluso si tengo una línea para cada cláusula if-else, solía encerrarla entre llaves. : D No sé por qué no puedo evitar hacer eso ... hhehe –

3

No sólo eso, incluso esto puede producir el mismo error

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

La razón es lógica. Si pones una declaración de una sola línea en la condición if else que indirectamente significa que el flujo condicional está terminando con esa línea. En ese caso, si usa alguna declaración || algo como el anterior que no tendrá sentido/impacto de ninguna manera, entonces eso significa que es una especie de cadena literal. No es exactamente incorrecto, más bien es innecesario. El editor visual studio de Mind C# reduce casi todos los errores posibles y la carga de memoria innecesaria.

Cuando pones llaves, indiactes que puedes usar esa variable dentro del mismo bloque por alguna lógica. Entonces el editor te permitirá hacer eso. En ese momento, el VS supone que puede agregar el código en el futuro. Entonces solo le dará una advertencia sobre esa línea. Sin llaves, supone sólidamente que no va a usar esa variable (debido al alcance). Por lo tanto, se necesita como error.

Cuestiones relacionadas