Weil Ihre Einbuchtung irreführend, tatsächlich der erste Code:
var s = "Nice";
switch (s)
{
case "HI":
break;
const string x = "Nice";
case x:
Console.Write("Y");
break;
}
That ist, x
ist in einemdeklariertAussage (obwohl nach einem break
), wo es gültig ist. Direkt in einer switch
-Anweisung ist es jedoch ungültig - die einzigen gültigen Anweisungen sind case
und default
.
, Ferner const
Erklärungen ausgewertet werden bei der Kompilierung, so x
definiert ist, obwohl eine vor break
Anweisung gibt.
weist jedoch darauf hin, dass die Mono C# Compiler wird diesen Code nicht kompiliert, klagt er, dass „der Name‚x
‘existiert nicht im aktuellen Bereich“, so Mono mehr Kontrollen zu implementieren als der .NET-Compiler scheint. Allerdings kann ich im C# -Standard keine Regeln finden, die diese Verwendung der const
-Deklaration verbieten, also nehme ich an, dass der .NET-Compiler richtig ist und der Mono-Compiler falsch ist.
Jede andere Sprache erlaubt es? – Vivasaayi
Warum möchten Sie beides tun? – Jodrell
Ob es wahrscheinlich ist, dass jemand Code wie diesen schreiben würde, ist immer noch eine interessante Frage. Es muss hinter den Kulissen seltsame Scoping-Sachen geben. –