首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# switch语句中的变量声明

C# switch语句中的变量声明
EN

Stack Overflow用户
提问于 2008-10-21 16:49:26
回答 5查看 62.5K关注 0票数 141

为什么在C# switch语句中,对于一个在多个情况下使用的变量,只在第一个情况下声明它?

例如,下面的代码抛出错误“已在此作用域中定义了名为' variable‘的局部变量”。

代码语言:javascript
复制
switch (Type)
{
    case Type.A:
            string variable = "x";
                break;
    case Type.B:
            string variable = "y";
                break;
}

但是,根据逻辑,如果类型为Type.B,则不应命中初始声明。switch语句中的所有变量是否都存在于单个作用域中,它们是在处理任何逻辑之前创建/分配的吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-21 16:52:11

我认为它与变量的整体作用域有关,它是在开关级别定义的块级作用域。

就个人而言,如果您在示例中将某个值设置为开关内部的某个值,以使其真正具有任何好处,则无论如何您都会希望在开关外部声明它。

票数 50
EN

Stack Overflow用户

发布于 2008-10-21 17:11:49

如果您想要将变量的作用域限定为特定的case,只需将case包含在它自己的块中:

代码语言:javascript
复制
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;
}
票数 264
EN

Stack Overflow用户

发布于 2008-10-21 16:52:46

是的,作用域是整个交换模块-不幸的是,IMO。但是,您始终可以在单个案例中添加大括号,以创建较小的作用域。至于它们是否被创建/分配-堆栈框架有足够的空间来容纳方法中的所有局部变量(抛开捕获变量的复杂性不谈)。这不像是在方法执行期间分配的空间。

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/222601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档