为什么这个转到这个开关内部不起作用?

时间:2014-05-12 08:51:08

标签: c# switch-statement

对于这个程序:

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,
}

我得到了:

  

"开关表达式或案例标签必须是bool,char,string,   积分,枚举或相应的可空类型"

state变量为enum类型。如果我评论goto case行,则错误消失。

我正在使用VS 2013. + .NET 4.5.1。

4 个答案:

答案 0 :(得分:64)

enum被输入ulong并且您同时使用goto case时,这是C#编译器的known bug。如果您从ulong中删除enum,则编译就可以了。因为没有多少人遇到这个问题,他们并不专注于修复它。

答案 1 :(得分:6)

根据您的使用情况,这也可能是您的选择:

switch (state)
{
    case States.Zero:
    case States.One:
        Console.WriteLine("One");
        break;
}

这应该根据这里的示例工作:http://msdn.microsoft.com/de-de/library/06tc147t.aspx

答案 2 :(得分:4)

您可以使用goto标签而不是直接在goto语句中使用case

switch (state)
{
    case States.One:
caseZeroRedirect:
        Console.WriteLine("One");
        break;
    case States.Zero:
        CouldDoSomethingFirst();
        goto caseZeroRedirect;
}

答案 3 :(得分:0)

你应该试试这个: -

switch (state)
{
 case States.Zero:
 case States.One:
    Console.WriteLine("1");
    break;
}
相关问题