对于switch语句中的每个case/default块,使用花括号的C#switch语句?

pix*_*xel 1 c# switch-statement

通常,C#中的switch语句如下所示

switch (sh)
{
   case 1:
      DoThis();
      DoThat();
      break;
   case 2:
      DoThis();
      DoThat();
      break;
   default:
      DoThis();
      DoThat();
      break;   
}
Run Code Online (Sandbox Code Playgroud)

但对于第一次,我看到用花括号像下面一个switch语句中的每个case语句的人:

switch (sh)
{
   case 1:
   {
      DoThis();
      DoThat();
      break;
   }
   case 2:
   {
      DoThis();
      DoThat();
      break;
   }
   default:
   {
      DoThis();
      DoThat();
      break; 
   }  
}
Run Code Online (Sandbox Code Playgroud)

为什么这些花括号{,}用于上面的case语句的每个case和默认块?

他们为什么需要?

有什么不同?

Evk*_*Evk 5

它们不是必需的,但如果在多个分支中声明具有相同名称的变量,它们将非常有用:

switch (sh) {
    case 1:
        var test = "test";
        Console.WriteLine(test);
        break;
    case 2:
        var test = "test";
        Console.WriteLine(test);
        break;
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,抱怨冲突的变量名称.但是如果你添加大括号

switch (sh) {
    case 1: {
        var test = "";
        Console.WriteLine(test);
        break;
    }
    case 2: {
        var test = "";
        Console.WriteLine(test);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将为每个分支创建自己的范围,它将编译良好.

有些人习惯了这个并且总是添加护腕,即使没有定义任何变量.