Jer*_*emy 117 c# switch-statement
为什么在C#switch语句中,对于在多种情况下使用的变量,您只在第一种情况下声明它?
例如,以下引发错误"已在此范围中定义名为'variable'的局部变量".
switch (Type)
{
case Type.A:
string variable = "x";
break;
case Type.B:
string variable = "y";
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,根据逻辑,如果类型为,则不应该触发初始声明Type.B.switch语句中的所有变量是否都存在于单个作用域中,是否在处理任何逻辑之前创建/分配它们?
Mic*_*urr 214
如果你想要一个作用于特定情况的变量,只需将case包含在它自己的块中:
switch (Type)
{
case Type.A:
{
string variable = "x";
/* Do other stuff with variable */
}
break;
case Type.B:
{
string variable = "y";
/* Do other stuff with variable */
}
break;
}
Run Code Online (Sandbox Code Playgroud)
Mit*_*ers 44
我认为它与变量的整体范围有关,它是在交换机级别定义的块级范围.
就个人而言,如果你在一个开关中为某个东西设置一个值,它真的有任何好处,你还是想在交换机之外声明它.
Jon*_*eet 33
是的,范围是整个交换机块 - 不幸的是,IMO.但是,您始终可以在单个案例中添加大括号,以创建较小的范围.至于它们是否被创建/分配 - 堆栈帧有足够的空间用于方法中的所有局部变量(不考虑捕获变量的复杂性).它不像在方法执行期间分配空间.
| 归档时间: |
|
| 查看次数: |
46899 次 |
| 最近记录: |