Почему это не работает в этом коммутаторе?
Для этой программы:
class Program
{
static void Main(string[] args)
{
var state = States.One;
switch (state)
{
case States.One:
Console.WriteLine("One");
break;
case States.Zero:
goto case States.One;
}
}
}
public enum States : ulong
{
Zero = 0,
One = 1,
}
Я получил:
"Выражение switch или case label должно быть bool, char, string, интеграл, перечисление или соответствующий нулевой тип"
Но переменная state
имеет тип enum
. Ошибка исчезнет, если я прокомментирую строку goto case
.
Я использую VS 2013. +.NET 4.5.1.
Ответы
Ответ 1
Это известная ошибка компилятора С#, когда enum
вводится как ulong
, и вы используете goto case
одновременно. Если вы удалите ulong
из enum
, он просто компилируется. И поскольку не так много людей сталкиваются с этой проблемой, они не фокусируются на ее исправлении.
Ответ 2
В зависимости от вашего варианта использования это также может быть для вас:
switch (state)
{
case States.Zero:
case States.One:
Console.WriteLine("One");
break;
}
Это должно работать в соответствии с примером здесь: http://msdn.microsoft.com/de-de/library/06tc147t.aspx
Ответ 3
Вы можете использовать метку для goto вместо использования case
непосредственно в инструкции goto:
switch (state)
{
case States.One:
caseZeroRedirect:
Console.WriteLine("One");
break;
case States.Zero:
CouldDoSomethingFirst();
goto caseZeroRedirect;
}
Ответ 4
Вы должны попробовать следующее: -
switch (state)
{
case States.Zero:
case States.One:
Console.WriteLine("1");
break;
}