C#switch语句中的变量声明
为什么在C#switch语句中,对于在多种情况下使用的变量,只能在第一种情况下声明它?
例如,以下内容将引发错误“已在此范围内定义了一个名为'变量'的局部变量”。
switch (Type)
{
case Type.A:
string variable = "x";
break;
case Type.B:
string variable = "y";
break;
}
但是,根据逻辑,如果类型为Type.B
,则不应击中初始声明。 switch语句中的所有变量是否存在于单个作用域中,并且是在处理任何逻辑之前创建/分配的?
我相信它与变量的整体范围有关,它是在交换机级别定义的块级作用域。
就个人而言,如果您在示例中为交换机内的某个内容设置了一个值,因为它确实有任何好处,您仍然希望在交换机之外声明它。
如果您想要将变量作用于某个特定的案例,只需将案例放在自己的块中即可:
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;
}
是的,范围是整个开关块 - 不幸的是,国际海事组织。 但是,您可以随时在一个案例中添加大括号,以创建一个较小的范围。 至于它们是否被创建/分配 - 堆栈框架为方法中的所有局部变量提供了足够的空间(不考虑捕获的变量的复杂性)。 这不是在方法执行期间分配空间。
链接地址: http://www.djcxy.com/p/2425.html