为什么在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语句中的所有变量是否都存在于单个作用域中,是否在处理任何逻辑之前创建/分配它们?
为什么C#允许这样:
var s = "Nice";
switch (s)
{
case "HI":
break;
const string x = "Nice";
case x:
Console.Write("Y");
break;
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
var s = "Nice";
switch (s)
{
const string x = "Nice";
case x:
Console.Write("Y");
break;
}
Run Code Online (Sandbox Code Playgroud) ...
case 1:
string x = "SomeString";
...
break;
case 2:
x = "SomeOtherString";
...
break;
...
Run Code Online (Sandbox Code Playgroud)
有没有我不了解C#中的switch语句?为什么在使用案例2时这不是错误?
编辑:此代码有效,不会抛出错误.
可能重复:
C#中的Case语句块级别声明空间
例如:
string danger;
switch ( this.Type )
{
case Warfare.Nuclear:
case Warfare.Biological:
case Warfare.Chemical:
danger = "deadly";
break;
case Warfare.Air:
string threat = "major"
...
break;
case Warfare.Ground:
string threat = "medium"
...
break;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能只在每个变量中定义具有相同名称的局部变量,而不必使用不同的名称或在switch语句之外声明变量,这些变量不会在其外部使用.