C# Switch语句中的Switch语句?
我必须评估许多条件。就我而言,我必须这样做:C# Switch语句中的Switch语句?,c#,switch-statement,C#,Switch Statement,我必须评估许多条件。就我而言,我必须这样做: switch(id) { case 5: // switch some other cases here case 6: // set some value ... } 在案例5中使用另一个开关是否是良好的做法?如果没有,还有什么更好?有if语句吗?我会调用一个特定于案例5的函数,然后在该函数中使用开关案例。例如: switch(id) { case 5: Fu
switch(id)
{
case 5:
// switch some other cases here
case 6:
// set some value
...
}
在案例5中使用另一个开关是否是良好的做法?如果没有,还有什么更好?有
if
语句吗?我会调用一个特定于案例5的函数,然后在该函数中使用开关案例。例如:
switch(id)
{
case 5:
FunctionFiveSpecific(id);
case 6:
// set some value
...
}
特定于案例5的功能:
private void FunctionFiveSpecific(id)
{
// other switch in here
}
我会调用一个函数,在传统的情况下传递,在函数中对它们进行切换。使代码更清晰。我经常使用的另一种方法确实是嵌套式的,如果唯一可能出错的是它可能会损害可读性:
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
...
}
Switch语句不是坏习惯。嵌套的switch语句看起来可能很混乱
也许可以考虑在另一种方法中嵌入嵌套的switch语句以提高清晰度。如果可能,请使用多态性。这将使您的代码更干净。更好的做法是将不同的行为多层次地封装在不同的类中,并尽可能避免使用switch语句 这并不总是可能的,如果您必须使用switch语句,那么我不会放置另一个嵌套switch语句(或if语句的集合),但可能会有一个包含该逻辑的方法调用
如果您在文章中详细介绍您正在尝试做的事情,我们可能会提供更好的建议。一旦您开始筑巢,您的体重就会开始上升。根据嵌套开关的复杂程度,维护它可能会很有趣。您可能需要考虑将第二个嵌套开关移动到它自己的函数。比如说
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语句移出第一个语句,它更易于维护,也可以单独进行测试
尝试重构代码以消除切换情况。行为的Switch语句可以重构为策略模式
使用switch语句本身就是一种不好的做法。只要它能工作,任何事情都是好的。@the Power查看Int3的配置文件,生活在一个无法(或可能永远无法)获得理想解决方案的世界中,我对这一评论持保留态度。有时,任何有效的东西都是当时能够实现的。不幸的是,并不是总是可以避免的。你的条件会随着使用类和多态性而消失吗?你也可以考虑使用“表驱动”的方法。通常可以将一个大的嵌套switch语句转换为字典或数组查找。事实上,这是一个非常适合本文的答案。想象一下,通过使用这里提到的OOP概念之一,可以实现一个没有if语句的代码。+1用于将多态行为分离为策略。不幸的是,对于简单的事情来说,这是过度的工作,因为你不能重构你的代码,因为它来自“外部”:(您能为您的模式提供一个简单的代码示例吗?我不确定我是否能理解如何将嵌套开关转换为此模式。。那篇文章似乎并没有建议强烈建议避免使用非嵌套开关。对于嵌套开关,是否有其他特定的原因避免使用开关?除了性能原因,性能原因并非如此。)在今天的机器上是很重要的。强烈建议尽可能避免使用switch语句。不要传播fud。有限制的东西并不是避免它的理由。foreach有限制,为什么要使用它?见鬼C#有限制,为什么要麻烦?
switch
可读性更高,意义不大如果重要的话会更快。但如果你是指多态性,那么我同意。你能更具体一点并给出代码示例吗?