对于这个程序:
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,
}
Run Code Online (Sandbox Code Playgroud)
我有:
"switch表达式或case标签必须是bool,char,string,integral,enum或相应的可空类型"
但state变量是enum类型.如果我评论该goto case行,错误就会消失.
我正在使用VS 2013. + .NET 4.5.1.
我想知道为什么C#要求我break在switch语句中使用,尽管根据定义不允许使用直通语义.因此,编译器可以生成break每个case块的末尾并省去麻烦.
但是,有一种情况(已在本网站上讨论过),我可以提出这可能是明确使用的原因break:
switch (foo) {
case 0:
case 1:
bar();
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
这里,bar()如果foo值为0或1 ,则调用该方法.
如果编译器自己生成break语句,那么这个选项会在最真实的意义上打破.这是它,这是为什么休息是强制性的还是有其他正当理由?