2012-09-18 3 views
6

Ceci est mon code:erreur avec instructions incorporées

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

iPlay.Play(); 

Et voici l'erreur:

Embedded statement cannot be a declaration or labeled statement

Si cela est impossible, l'esprit de me dire comment?

+2

L'erreur est que vous ne pouvez pas déclarer une variable ('iPlay') dans une instruction unique si/sinon, sauf si vous utilisez' {accolades} '. (Je pense que le langage a été conçu de cette façon pour éviter l'ambiguïté de portée ...) – Cameron

Répondre

9

iPlay.Play(); dépasse la portée de votre clause else dans votre instruction if-else. Essayez de l'entourer d'accolades pour plusieurs lignes.

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

C'est la plus grande raison pour laquelle je suggère que vous ** utilisiez toujours des accolades même avec une ligne **. –

+1

@PreetSangha même si j'ai une ligne pour chaque clause if-else, j'ai l'habitude de la placer entre accolades. : D Je ne sais pas pourquoi je ne peux pas me retenir de le faire .. hhehe –

3

Non seulement que même cela peut produire la même erreur

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

La raison est logique. Si vous mettez une instruction de ligne unique dans la condition if else, cela signifie indirectement que le flux conditionnel se termine avec cette ligne. Dans ce cas, si vous utilisez une déclaration || quelque chose comme ci-dessus qui n'aura aucun sens/impact d'une manière ou d'une autre, alors cela signifie que c'est une chaîne littérale. Ce n'est pas tout à fait faux, c'est plutôt inutile. Mind C# éditeur de studio visuel réduit presque toutes les erreurs possibles et le chargement de la mémoire inutiles. Lorsque vous placez des accolades, il indique que vous pouvez utiliser cette variable dans le même bloc pour une certaine logique. Donc, l'éditeur vous permettra de faire cela. À ce moment, le VS suppose que vous pouvez ajouter le code à l'avenir. Donc, il vous donnera seulement un avertissement à propos de cette ligne. Sans accolades, il est supposé que vous n'allez pas utiliser cette variable (en raison de la portée). Donc, cela prend cela comme erreur.

Questions connexes