C#Switch/case共享相同的范围?

Roy*_*mir 12 .net c# clr .net-4.0 switch-statement

可能重复:
c#switch语句中的变量声明

我一直在想:

我写的时候:

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

        }
Run Code Online (Sandbox Code Playgroud)

case "1":区域有一个代码区域被执行(直到休息)

现在,

从上面的瀑布无法进入case of 2例如:

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

            case "2":

                break;
        }
Run Code Online (Sandbox Code Playgroud)

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

所以我假设,他们有不同的执行区域(案例......休息).

为什么会出现这种错误呢?

在此输入图像描述

//冲突变量tmpInt定义如下.

ps这只是一个愚蠢的问题,仍然很有趣.

Joe*_*oey 32

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

int x = 1;
goto foo;
// This part gets never executed but you can legally refer to x here.
foo:
Run Code Online (Sandbox Code Playgroud)

但是,如果您愿意,可以执行以下操作:

switch (temp)
{
    case "1":
        {
            int tmpint = 1;
            break;
        }
    case "2":
        {
            int tmpint = 1;
            break;
        }
}
Run Code Online (Sandbox Code Playgroud)

事实上,对于switch我所做的一些陈述,因为它通过不污染其他cases 使生活变得更容易.我有时想念Pascal ;-)

关于您的尝试尝试,您必须在C#中使用goto case "2".