C# switch语句中的这个变量在没有声明的情况下如何使用?

C# switch语句中的这个变量在没有声明的情况下如何使用?,c#,switch-statement,variable-initialization,C#,Switch Statement,Variable Initialization,可能重复: 在这个switch语句中(令我惊讶的是,它编译和执行时没有错误),变量something没有在案例2中声明,而案例1从未执行过。这怎么有效?变量something在没有声明的情况下如何使用 switch(2){ case 1: string something = "whatever"; break; case 2: something = "where??"; break; } 这是因为switch语句的作用域是跨案例的。因此,当最初处理switch语句时,

可能重复:

在这个switch语句中(令我惊讶的是,它编译和执行时没有错误),变量something没有在案例2中声明,而案例1从未执行过。这怎么有效?变量something在没有声明的情况下如何使用

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

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


更准确地说,当生成IL时,变量在其定义或其定义以下的任何
情况下都可用。因此,如果在第二个
案例中声明了一个变量,那么它在第一个
案例中不可用,但在第三个
案例中可用。好的,当您输出“某物”时,控制台会告诉您什么?实际上“在哪里”?关于“为什么这样做”:我只能打赌,当你在“同一块”(如switch语句)中创建一个变量时,它会创建变量,无论是否达到实际代码。@ATaylor-不,
某些东西的作用域仅限于
开关
。请参阅此问题的公认答案:[[1]:“如何在不初始化的情况下使用某些内容?”请注意,这里并不是这样。您可以将其理解为使用未声明的变量(尽管情况并非如此),但没有任何地方使用Unitilized变量,这是一个单独的概念。事实上,唯一的用法是赋值。@AnthonyPegram-你在最后两句话中自相矛盾。赋值就是一种用法。但是,你关于初始化和声明的观点是有效的,我编辑以反映这一点。这是由编译器完成的吗?@TravisJ,是的。我编辑了这个问题以澄清这一点。“在开关内部的任何情况下定义的变量都定义在范围的顶部”,这并不完全是事实。如果在案例2中而不是案例1中声明了
某个东西,那么就有错了。@TravisJ,我很抱歉,让我修改这个声明。谢谢!