Possible Duplicate:
Variable declaration in c# switch statement
What is the purpose of the extra braces in Switch case?switch语句
今天,我写了一小块代码,并在调试时间的奇怪的行为,VS打了我,并告诉我,我犯了大错我的本地变量名:“一个局部变量命名'我'已经在此范围内定义“。所以我说:“好的VS,让我立刻修复它,我想首先考虑我的案例,因为我更喜欢它们!”。所以我做了我的化妆品改变......但突然停止VS呜呜有关错误:
MyEnum enumerator = MyEnum.B;
switch (enumerator)
{
case MyEnum.A:
{
Int32 i = 0;
// DoStuffsA();
break;
}
case MyEnum.B:
{
Double i = 0D;
// DoStuffsB();
break;
}
}
好吧......我知道的“范围”的意思,我知道我产生了两个不同的范围,像这样。问题是我不知道switch语句是如何被转换成IL代码的,我总是认为所有的case语句都被放入switch范围,不管大括号是否被使用。所以...下面的古怪可以编译,对吧?
MyEnum enumerator = MyEnum.B;
switch (enumerator)
{
case MyEnum.A:
String s = "Hello!";
Console.WriteLine(s);
break;
case MyEnum.B:
s = "Goodbye!";
Console.WriteLine(s);
break;
}
但不是以下之一:
MyEnum enumerator = MyEnum.B;
switch (enumerator)
{
case MyEnum.A:
{
String s = "hello";
Console.WriteLine(s);
break;
}
case MyEnum.B:
{
s = "goodbye";
Console.WriteLine(s);
break;
}
}
一些能更好地解释我的编译器的行为在这种情况呢? 非常感谢!