2012-11-15 7 views
14

In un switch, se scriviamo una parola o una lettera singola invece di default non genera un errore. ad es.in caso di interruzione se scriviamo "default" come qualsiasi parola o singola lettera non genera un errore

switch(10) 
{ 
    case 1: 
    break; 

    hello: 
    break; 
} 

Viene eseguito senza generare un errore.

Qualcuno può spiegare come funziona?

+3

Mi ricorda un vecchio scherzo/trucco: i linguaggi in stile C comprendono gli URL! Puoi semplicemente incollare 'http: // www.google.com /' ovunque sulla propria linea! = P – Izkata

risposta

15

Si sta compilando perché hello: è un'etichetta e quindi può essere la destinazione di un goto. Quando ho compilato questo messaggio ho ricevuto degli avvisi su un'etichetta senza riferimento (poiché non avevo un goto)

Ecco un esempio da inserire in LINQPad: noterai che stampa sia "1" che "ciao":

switch(1) 
{ 
    case 1: 
     "1".Dump(); 
     goto hello; 
    break; 

    hello: 
     "hello".Dump(); 
     break; 
} 
12

Non è correlato alla dichiarazione switch. È un identificatore di etichetta per il (usato raramente a causa di cattive pratiche) goto statement.

goto something2; 
something1: 
    Console.WriteLine("world"); 
    goto done; 
something2: 
    Console.WriteLine("hello"); 
goto something1; 
done: 
5

Per esempio, è possibile vedere il seguente frammento di codice:

switch (10) 
{ 
    case 1: 
     break; 

    hello: 
     Console.Write("In hello label"); 
     break; 
    case 2: 
     goto hello; 
     break; 
} 

In quanto sopra si sta definendo un'etichetta per goto in switch. Se l'istruzione dell'interruttore scende a case 2, allora andrà l'etichetta hello. Poiché lo snippet di codice originale non ha uno goto hello;, verrà visualizzato un avviso di un'etichetta senza riferimento.

L'etichetta hello non deve fare nulla con l'istruzione switch (tranne che è definita all'interno).

Problemi correlati