为什么这个转换工作没有转到?
对于这个程序:
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”
但state
variables是enum
types。 如果我评论goto case
行,错误消失。
我正在使用VS 2013. + .NET 4.5.1。
这是已知的C#编译器的错误 ,当enum
types为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; }