C# 开关/案例共享相同的范围?

标签 c# .net .net-4.0 clr switch-statement

<分区>

Possible Duplicate:
Variable declaration in c# switch statement

我一直想知道:

当我写的时候:

 switch (temp)
        {
            case "1":
                int tmpInt = 1;
                break;
           
        }

case "1": 区域有一段代码被执行(直到中断)

现在,

来自上方的瀑布不能进入case of 2,例如:

  switch (temp)
        {
            case "1":
                int tmpInt = 1;
             
            case "2":
             
                break;
        }

//错误:缺少中断返回。

所以我假设,他们有不同的处决区域(case....break)。

那么为什么会出现这个错误呢?

enter image description here

//下面定义了冲突变量tmpInt。

附注这只是一个愚蠢的问题,但仍然很有趣。

最佳答案

在 C# 中,范围仅由大括号确定。如果没有,则没有单独的范围。对于 switch/case 显然没有。您所说的 »执行区域« 与您可以引用变量的位置完全无关。对于一个人为的例子:

int x = 1;
goto foo;
// This part gets never executed but you can legally refer to x here.
foo:

不过,如果您愿意,您可以执行以下操作:

switch (temp)
{
    case "1":
        {
            int tmpint = 1;
            break;
        }
    case "2":
        {
            int tmpint = 1;
            break;
        }
}

事实上,对于某些 switch 语句,我会这样做,因为它不会污染其他 case,从而使生活变得更加轻松。我有时会想念 Pascal ;-)

关于您的失败尝试,您必须在 C# 中使用 goto case "2" 明确说明。

关于C# 开关/案例共享相同的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11409709/

相关文章:

c# - 为什么不是所有国家都出现在 CultureInfo.GetCultures() 中?

c# - 在 Visual Studio Code for Mac 上找不到类型或命名空间名称 'System'

.net - 为什么TaskFactory.StartNew Task没有立即启动?

c# - Linq to Entities 奇怪的结果

c# - 如何降级到.NET Core 1.0?

C# Winforms : A thread that can control the UI and can "sleep" without pausing the whole program. 怎么办?

c# - NHibernate QueryOver<> - 通过 SubQuery 聚合函数

c# - MonthGenitiveNames 和 MonthNames 之间有什么区别?为什么月份有空白?

.net-3.5 - .NET 3.5 SP1 先决条件,MS 为客户端提供 4.0

C# 语法 - 变量名后的冒号