3

可能重复:
C# 开关变量初始化:为什么此代码不会导致编译器错误或运行时错误?

在这个 switch 语句中(令我惊讶的是,它编译并执行没有错误),变量 something 没有在 case 2 中声明,并且 case 1 永远不会执行。这如何有效?如何在没有声明的情况下使用变量?

switch(2){
 case 1:
  string something = "whatever";
  break;
 case 2:
  something = "where??";
  break;
}
4

1 回答 1

5

这是因为一个switch语句的范围是跨案例的。因此,switch最初处理该语句时,它定义了一个名为的变量something,并且在这种情况下将具有其默认值null...。

更准确地说,当生成 IL 时,变量case在其定义范围内或以下的任何变量都可用。因此,如果在第二个中声明了一个变量,则case它在第一个中不可用,case但在第三个中可用case

于 2012-10-11T15:57:43.473 回答