Bar*_*zKP 5 c# language-lawyer
以下代码编译:
int a = 0;
switch (a)
{
case 1:
return;
defau1t: // note the typo
return;
}
Run Code Online (Sandbox Code Playgroud)
因为defau1t被解释为goto标签.
但是在以下情况中:
switch (a)
{
defau1t:
return;
}
Run Code Online (Sandbox Code Playgroud)
编译器正确识别错误:
错误CS1525:意外符号
defau1t', expecting}',case', or默认值:'
这是为什么?switch如果它导致(看似)不连贯的行为,那么在语句中允许任意标签的原因是什么?
旁注:对于C++和Java的类似代码片段,可以观察到同样的问题.
小智 9
我觉得你看错了.并不是说允许它是一个特殊的例外,它没有特别的例外来禁止它.
有一个规则,switch块必须以a case或defaultlabel 开头,但除此之外,任何有效的代码都可以是块的一部分.
包括其他标签.
不允许这样做会使语言更难理解,会使编译器更难编写,并且会带来一些好处,这种好处只是次要的.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |