Jer*_*ron 8 c# switch-statement
...
case 1:
string x = "SomeString";
...
break;
case 2:
x = "SomeOtherString";
...
break;
...
Run Code Online (Sandbox Code Playgroud)
有没有我不了解C#中的switch语句?为什么在使用案例2时这不是错误?
编辑:此代码有效,不会抛出错误.
Nol*_*rin 16
你必须要小心你如何看待switch这里的陈述.有没有创作的可变范围会不惜一切,其实.不要仅仅因为案例中的代码缩进它存在于子范围内的事实.
当交换块被编译时,case标签被简单地转换为标签,并且goto根据切换表达式在switch语句的开始处执行适当的指令.实际上,您可以手动使用goto语句来创建"直通"情境(C#直接支持),如MSDN页面所示.
goto case 1;
Run Code Online (Sandbox Code Playgroud)
如果您特别想为switch块中的每个案例创建范围,则可以执行以下操作.
...
case 1:
{
string x = "SomeString";
...
break;
}
case 2:
{
string x = "SomeOtherString";
...
break;
}
...
Run Code Online (Sandbox Code Playgroud)
这需要您重新声明变量x(否则您将收到编译器错误).在某些情况下,确定每个(或至少一些)范围的方法非常有用,您肯定会在代码中不时地看到它.
MSDN上的文档说:
在switch语句的switch-block中声明的局部变量的范围(第8.7.2节)是switch-block.
此外,之前已经提出过类似的问题: c#switch语句中的变量声明