joe*_*han 4 c# switch-statement
刚刚开始C#,我知道switch如果至少有一个陈述,你不能从一个案件转到另一个案件.错误:Control cannot fall through from one case to another.
只是为了有趣的东西,我尝试了这个:
char c = 'a';
switch (c)
{
case 'a':
Console.WriteLine("yes");
goto JumpToNextCase;
case 'b':
JumpToNextCase:
Console.WriteLine("Kiddin me?");
break;
}
Run Code Online (Sandbox Code Playgroud)
这有效!怎么可能?我现在没有违反从一个案件跳到另一个案件的规则吗?任何令人满意的答案?
关于案件堕落的错误是对事故的保护,而不是对语言的一些基本限制.以前的语言如C让你没有警告或错误,但通常 - 这是一个错误,你只是忘记了break.C#引入了错误以防止这些错误.
没有什么可以阻止你解决它,就像你有的一样.但是,你必须故意这样做,而不是偶然,所以(希望)不会通过这样做来引入错误.
是的,限制只是为了防止在99%的情况下出现意外和错误.
但是,如果您认为自己希望它能够正常工作,那么您甚至不需要使用标签来使其正常工作.你可以goto用来跳转到不同的case!
char c = 'a';
switch (c)
{
case 'a':
Console.WriteLine("yes");
goto case 'b';
case 'b':
Console.WriteLine("Kiddin me?");
break;
}
Run Code Online (Sandbox Code Playgroud)
你也可以跳转到default.C#规范提到:
8.9.3 goto语句 goto语句将控制转移到由标签标记的语句.
Run Code Online (Sandbox Code Playgroud)goto-statement: goto identifier ; goto case constant-expression ; goto default ;(......)
goto case语句的目标是直接封闭的switch语句(第8.7.2节)中的语句列表,其中包含case具有给定常量值的标签.(......)
goto default语句的目标是直接包含的switch语句(第8.7.2节)中的语句列表,其中包含default标签.