为什么这个转换工作没有转到?

对于这个程序:

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

我有:

“开关expression式或案例标签必须是布尔型,字符型,string型,整型,枚举型或对应的可空types”

statevariables是enumtypes。 如果我评论goto case行,错误消失。

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

这是已知的C#编译器的错误 ,当enumtypes为ulong并且同时使用goto case 。 如果你从enum删除ulong ,它编译得很好。 而且因为没有多less人遇到这个问题,所以他们没有专注于解决这个问题。

根据您的使用情况,这也可能是您的一个select:

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

这应该按照这里的一个例子: http : //msdn.microsoft.com/de-de/library/06tc147t.aspx

您可以使用转换标签,而不是直接在goto语句中使用该标签:

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

你应该试试这个:

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