Подтвердить что ты не робот

Почему это не работает в этом коммутаторе?

Для этой программы:

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.

4b9b3361

Ответ 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;
}