对于这个程序:
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。
答案 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;
}