我发现自己经常遇到这种情况,并且想知道是否存在Java或C ++或任何其他语言的方式,允许您执行交换机中多个case语句通用的代码,但也专门用于个别案例,例如:
switch(var)
{
case Preceeding:
{
// code executed for both FollowingA and FollowingB
}
break;
case FollowingA:
{
// code executed for only FollowingA
}
break;
case FollowingB:
{
// code executed for only FollowingB
}
break;
}
而不是必须这样做:
switch(var)
{
case FollowingA:
case FollowingB:
{
// code executed for FollowingA and FollowingB
switch(var)
{
case FollowingA:
{
// code executed for FollowingA
}
break;
case FollowingB:
{
// code executed for FollowingB
}
break;
}
}
break;
}
答案 0 :(得分:4)
这实际上取决于你想要做什么 - 不只是来自"你能做到这一点吗?#34;透视,但您还必须关心您或其他人以后必须阅读和理解代码的事实。
我通常会发现,如果有一些事情需要在一个以上的开关情况下完成,它应该进入一个函数(如果它足够小,大多数编译器会内联这些代码,所以那里没有性能损失)。
所以:
void CommonCode()
{
...
}
switch(var)
{
case A:
CommonCode();
...
break;
case B:
CommonCode();
...
break;
}
然而,这个问题有很多不同的解决方案,它确实应该遵循"你的代码所做的是什么意思"这应该指导你如何解决这个问题。编写清晰的代码是主要目标。如果这不起作用,请以不同方式设计代码。 }
答案 1 :(得分:0)
var
的值可以是Preceding
或FollowingA
或FollowingB
,因此在这种情况下使用switch是错误的。您可以在switch语句之前执行公共代码,或者如果您仍然希望这样做,请尝试以下操作:
switch(var)
{
case Preceeding:
{
// code executed for both FollowingA and FollowingB
} // no break here
case FollowingA:
{
// code executed for only FollowingA
}
break;
case FollowingB:
{
// code executed for only FollowingB
}
break;
}