Perché il vostro rientro è fuorviante, il primo codice è in realtà:
var s = "Nice";
switch (s)
{
case "HI":
break;
const string x = "Nice";
case x:
Console.Write("Y");
break;
}
Quello è, x
è dichiarato all'interno di un case
dichiarazione (anche se dopo un break
), dove è valida. Tuttavia, direttamente all'interno di un'istruzione switch
non è valido: le sole affermazioni valide sono case
e default
.
Inoltre, const
dichiarazioni vengono valutate al momento della compilazione, così x
è definito anche se c'è una dichiarazione break
prima.
Si noti tuttavia che il Mono compilatore C# non compilerà questo codice, si lamenta che “il nome di‘x
’non esiste nell'ambito corrente” in modo Mono sembra attuare più controlli rispetto al compilatore .NET. Tuttavia, non riesco a trovare alcuna regola nello standard C# che proibisca questo uso della dichiarazione const
quindi presumo che il compilatore .NET sia corretto e che il compilatore Mono sia sbagliato.
fonte
2013-05-22 14:18:23
Qualsiasi altra lingua lo consente? – Vivasaayi
perché vorresti farlo? – Jodrell
Se è probabile che qualcuno scriva un codice come questo, è comunque una domanda interessante. Deve esserci qualche strana roba da scopare che si svolge dietro le quinte. –