我必须评估许多条件。就我而言,我必须做这样的事情:
switch(id)
{
case 5:
// switch some other cases here
case 6:
// set some value
...
}
在案例5中使用另一个开关是一种好习惯吗?如果没有,有什么更好的?那里有if
个陈述?
答案 0 :(得分:19)
我会调用一个特定于案例5的函数,然后在该函数中使用switch case。例如:
switch(id)
{
case 5:
functionFiveSpecific(id);
case 6:
// set some value
...
}
案例5特有的功能:
private void functionFiveSpecific(id)
{
// other switch in here
}
<强>虽然强>
强烈建议尽可能避免使用switch语句。阅读here。
答案 1 :(得分:7)
唯一可能出错的是它可能会损害可读性:
switch(id)
{
case 5:
{
switch (somethingElse)
{
case 1:
// blah...
}
}
case 6:
// set some value
...
}
您可以通过将嵌套部分移动到方法中来改善这一点:
switch(id)
{
case 5:
Foo();
break;
case 6:
// set some value
...
}
答案 2 :(得分:7)
避免!
尝试重构代码以消除切换案例。行为的切换语句可以重构为策略模式。
答案 3 :(得分:6)
切换语句也不错。嵌套的switch语句可能很麻烦。
或许考虑将嵌套的switch语句嵌入到另一种方法中以提高清晰度。
答案 4 :(得分:6)
一旦你开始筑巢,你的Cyclomatic complexity开始上升。根据嵌套开关的复杂程度,维护起来很有趣。您可能想要考虑将第二个嵌套开关移动到它自己的函数。例如
switch (order.Status)
{
case OrderStatus.New:
// Do something to a new order;
break;
...
case OrderStatus.ReadyToShip
// Process Shipping Instructions
ShipOrder(order);
break;
}
然后如果您根据支付的运费类型进行了切换
void ShipOrder(Order order)
{
switch (order.ShippingMethod)
{
}
}
通过将第二个switch语句移出第一个,它更容易维护,也可以单独测试
答案 5 :(得分:5)
更好的做法是将不同的行为以多态方式封装在不同的类中,并尽可能避免使用switch语句。
这并不总是可行,如果你必须使用switch语句,那么我不会放置另一个嵌套的switch语句(或if语句的集合),但可能会有一个包含该逻辑的方法调用。
如果你发布一些关于你想要做的事情的更多细节,那么我们可能会提供更好的建议。
答案 6 :(得分:2)
尽可能使用多态性。这将使您的代码更清晰。
答案 7 :(得分:1)
我会调用一个函数并传入其他案例,并在函数中对它们执行开关案例。使清洁代码。我经常使用的另一种方法确实是嵌套的,如果是