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

上一篇: Variable declaration in a C# switch statement

下一篇: Switch statement fallthrough in C#?