Parce que ton indentation est trompeuse, le premier code est en réalité:
var s = "Nice";
switch (s)
{
case "HI":
break;
const string x = "Nice";
case x:
Console.Write("Y");
break;
}
C'est, x
est déclarée à l'intérieur d'un case
déclaration (même si après un break
), où il est valide. Cependant, directement à l'intérieur d'un switch
déclaration il est invalide – la seule valable déclarations il y a case
et default
.
En outre, const
des déclarations sont évalués au moment de la compilation, alors x
est défini même si il y a un break
déclaration avant.
Toutefois, notez que le Mono compilateur C# ne peut pas se compiler ce code, il se plaint que "le nom ‘x
"n'existe pas dans le champ d'application actuel" donc Mono semble pour mettre en œuvre plus de contrôles que l' .NET compilateur. Cependant, je ne trouve pas de règles dans le C# norme qui interdit l'utilisation de l' const
déclaration, donc je suppose que l' .NET est un compilateur droit et le Mono compilateur est mal.