gra*_*ady 20 c# switch-statement
我必须评估许多条件.就我而言,我必须做这样的事情:
switch(id)
{
case 5:
// switch some other cases here
case 6:
// set some value
...
}
Run Code Online (Sandbox Code Playgroud)
在案例5中有另一个开关是好的做法吗?如果没有,有什么更好的?在if那里发表声明?
Llo*_*ell 19
我将调用一个特定于案例5的函数,然后在该函数中使用switch case.例如 :
switch(id)
{
case 5:
functionFiveSpecific(id);
case 6:
// set some value
...
}
Run Code Online (Sandbox Code Playgroud)
案例5的具体功能:
private void functionFiveSpecific(id)
{
// other switch in here
}
Run Code Online (Sandbox Code Playgroud)
虽然
强烈建议尽可能避免使用switch语句.请在这里阅读.
唯一可能出错的是它可能会损害可读性:
switch(id)
{
case 5:
{
switch (somethingElse)
{
case 1:
// blah...
}
}
case 6:
// set some value
...
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将嵌套部分移动到方法中来改进这一点:
switch(id)
{
case 5:
Foo();
break;
case 6:
// set some value
...
}
Run Code Online (Sandbox Code Playgroud)
避免!
尝试重构代码以消除切换案例.行为的切换语句可以重构为策略模式.
![]()
一旦开始嵌套,您的Cyclomatic复杂性就会开始上升.根据嵌套开关的复杂程度,维护起来很有趣.您可能想要考虑将第二个嵌套开关移动到它自己的函数.例如
switch (order.Status)
{
case OrderStatus.New:
// Do something to a new order;
break;
...
case OrderStatus.ReadyToShip
// Process Shipping Instructions
ShipOrder(order);
break;
}
Run Code Online (Sandbox Code Playgroud)
然后,如果你有一个基于付费运输类型的开关
void ShipOrder(Order order)
{
switch (order.ShippingMethod)
{
}
}
Run Code Online (Sandbox Code Playgroud)
通过将第二个switch语句移出第一个,它更容易维护,也可以单独测试
更好的做法是将不同的行为以多态方式封装在不同的类中,并尽可能避免使用switch语句.
这并不总是可行,如果你必须使用switch语句,那么我不会放置另一个嵌套的switch语句(或if语句的集合),但可能会有一个包含该逻辑的方法调用.
如果你发布一些关于你想要做什么的更多细节,那么我们可能会提供更好的建议.