Потому что ваш отступы вводит в заблуждение, то первый код на самом деле:
var s = "Nice";
switch (s)
{
case "HI":
break;
const string x = "Nice";
case x:
Console.Write("Y");
break;
}
Это is, x
заявлено внутри case
(хотя после break
), где он действителен. Однако, прямо внутри заявления switch
это недействительно - единственными действительными утверждениями являются case
и default
.
Кроме того, const
декларации оцениваются во время компиляции, так x
определяется, даже если есть break
заявление раньше.
Однако, обратите внимание, что Mono C# компилятор не будет компилировать этот код, он жалуется, что «имя„x
“не существует в текущем контексте» так Mono кажется осуществить больше проверок, чем компилятор .NET. Однако я не могу найти никаких правил в стандарте C#, которые запрещают это использование объявления const
, поэтому я предполагаю, что компилятор .NET прав, а компилятор Mono ошибочен.
Есть ли на вашем языке русский язык? – Vivasaayi
Почему вы тоже хотите? – Jodrell
Независимо от того, будет ли кто-нибудь писать такой код, это еще интересный вопрос. Должно быть какое-то странное вещание, которое происходит за кулисами. –