C#是否总是允许您在switch()
语句中省略case:
语句之间的花括号?
像javascript程序员经常做的那样,省略它们会有什么效果呢?
示例:
switch(x)
{
case OneWay:
{ // <---- Omit this entire line
int y = 123;
FindYou(ref y);
break;
} // <---- Omit this entire line
case TheOther:
{ // <---- Omit this entire line
double y = 456.7; // legal!
GetchaGetcha(ref y);
break;
} // <---- Omit this entire line
}
发布于 2010-09-06 23:00:21
大括号是switch block的可选部分,它们不是开关部分的一部分。大括号可以插入到开关节中,也可以等同地插入到代码中的任何位置,以控制范围。
它们可用于限制开关块内的范围。例如:
int x = 5;
switch(x)
{
case 4:
int y = 3;
break;
case 5:
y = 4;
//...
break;
}
vs..。
int x = 5;
switch(x)
{
case 4:
{
int y = 3;
break;
}
case 5:
{
y = 4;//compiling error
//...
break;
}
}
注意:在使用第一个示例中的case 5块之前,C#将要求您将该块中的值设置为y。这是对意外变量的保护。
发布于 2010-09-06 23:13:11
交换机内部的大括号实际上根本不是交换机结构的一部分。它们只是作用域块,您可以将其应用于代码中任何您喜欢的地方。
拥有它们和不拥有它们的区别在于,每个块都有自己的作用域。您可以在作用域中声明局部变量,这与其他作用域中的其他变量不冲突。
示例:
int x = 42;
{
int y = x;
}
{
int y = x + 1; // legal, as it's in a separate scope
}
发布于 2010-09-06 23:01:34
它们并不是必须的,但是一旦您开始声明局部变量(在switch分支中),就非常推荐使用它们。
这是行不通的:
// does not compile
switch (x)
{
case 1 :
int j = 1;
...
break;
case 3:
int j = 3; // error
...
break;
}
这段代码可以编译,但很诡异:
switch (x)
{
case 1 :
int j = 1;
...
break;
case 3:
j = 3;
...
break;
}
所以这是最好的:
switch (x)
{
case 1 :
{
int j = 1;
...
}
break; // I prefer the break outside of the { }
case 3:
{
int j = 3;
...
}
break;
}
只要保持简单和可读性即可。您不希望要求读者对中间示例中涉及的规则有详细的了解。
https://stackoverflow.com/questions/3652408
复制相似问题