为什么在C#switch语句中,对于在多种情况下使用的变量,您只在第一种情况下声明它?
例如,以下引发错误"已在此范围中定义名为'variable'的局部变量".
switch (Type)
{
case Type.A:
string variable = "x";
break;
case Type.B:
string variable = "y";
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,根据逻辑,如果类型为,则不应该触发初始声明Type.B.switch语句中的所有变量是否都存在于单个作用域中,是否在处理任何逻辑之前创建/分配它们?
有没有理由我错过了case语句中的块不被视为块级声明空间?
我尝试时不断收到错误(变量已经声明)
case x:
var someVariable = 42;
break;
case y:
var someVariable = 40;
break;
Run Code Online (Sandbox Code Playgroud)
但我能做到
case x:
try{var someVariable = 42;}catch{}
break;
case y:
try{var someVariable = 40;}catch{}
break;
Run Code Online (Sandbox Code Playgroud)
如果C#允许通过语句,那就没有意义,但事实并非如此,我想不出你可以在case语句中声明变量并在该块之外使用它的场景.
在这个switch语句中(我惊讶地编译并执行而没有错误),在case 2中没有声明变量,而case 1从不执行.这有效吗?如何在不声明的情况下使用变量?
switch(2){
case 1:
string something = "whatever";
break;
case 2:
something = "where??";
break;
}
Run Code Online (Sandbox Code Playgroud)