为什么在C# switch语句中,对于一个在多个情况下使用的变量,只在第一个情况下声明它?
例如,下面的代码抛出错误“已在此作用域中定义了名为' variable‘的局部变量”。
switch (Type)
{
case Type.A:
string variable = "x";
break;
case Type.B:
string variable = "y";
break;
}
但是,根据逻辑,如果类型为Type.B
,则不应命中初始声明。switch语句中的所有变量是否都存在于单个作用域中,它们是在处理任何逻辑之前创建/分配的吗?
发布于 2008-10-21 16:52:11
我认为它与变量的整体作用域有关,它是在开关级别定义的块级作用域。
就个人而言,如果您在示例中将某个值设置为开关内部的某个值,以使其真正具有任何好处,则无论如何您都会希望在开关外部声明它。
发布于 2008-10-21 17:11:49
如果您想要将变量的作用域限定为特定的case,只需将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;
}
发布于 2008-10-21 16:52:46
是的,作用域是整个交换模块-不幸的是,IMO。但是,您始终可以在单个案例中添加大括号,以创建较小的作用域。至于它们是否被创建/分配-堆栈框架有足够的空间来容纳方法中的所有局部变量(抛开捕获变量的复杂性不谈)。这不像是在方法执行期间分配的空间。
https://stackoverflow.com/questions/222601
复制相似问题