相关疑难解决方法(0)

带有/不带大括号的C#Switch语句....有什么区别?

C#总是允许你在switch()语句之间的case:语句中省略大括号吗?

如javascript程序员经常做的那样省略它们有什么作用?

例:

switch(x)
{
  case OneWay:
  {                               //  <---- Omit this entire line
    int y = 123;
    FindYou(ref y);
    break;
  }                               //  <---- Omit this entire line
  case TheOther:
  {                               //  <---- Omit this entire line
    double y = 456.7; // legal!
    GetchaGetcha(ref y);
    break;
  }                               //  <---- Omit this entire line
}
Run Code Online (Sandbox Code Playgroud)

c# curly-braces switch-statement

69
推荐指数
4
解决办法
2万
查看次数

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

可能重复:
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这只是一个愚蠢的问题,仍然很有趣.

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

12
推荐指数
1
解决办法
6117
查看次数

切换语句的奇怪行为

可能重复:
c#switch语句中的变量声明
Switch case中额外大括号的目的是什么?

今天我写了一小段代码,在调试时,VS打了我一眼,告诉我我的局部变量名称犯了一个大错:"在这个范围内已经定义了一个名为'i'的局部变量".

MyEnum enumerator = MyEnum.B;

switch (enumerator)
{
    case MyEnum.A:
        Int32 i = 0;
        // DoStuffsA();
        break;

    case MyEnum.B:
        Double i = 0D;
        // DoStuffsB();
        break;
}
Run Code Online (Sandbox Code Playgroud)

所以我说"好吧VS,让我稍后解决它,我想首先考虑我的情况,因为我更喜欢它们!".所以我做了我的化妆品改变......但是突然VS停止抱怨这个错误:

MyEnum enumerator = MyEnum.B;

switch (enumerator)
{
    case MyEnum.A:
    {
        Int32 i = 0;
        // DoStuffsA();
        break;
    }

    case MyEnum.B:
    {
        Double i = 0D;
        // DoStuffsB();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

好的...我知道"范围"的含义,我知道我生产了两个不同的范围.问题是我不知道如何将switch语句转换为IL代码,并且我一直认为所有case语句都放在switch范围内,无论是否使用花括号.所以...可以编译以下奇怪,对吧?

MyEnum enumerator = MyEnum.B;

switch (enumerator)
{
    case MyEnum.A:
        String s = "Hello!";
        Console.WriteLine(s);
        break;

    case MyEnum.B: …
Run Code Online (Sandbox Code Playgroud)

c# enums

-2
推荐指数
2
解决办法
173
查看次数

标签 统计

c# ×3

switch-statement ×2

.net ×1

.net-4.0 ×1

clr ×1

curly-braces ×1

enums ×1