我正在构建一个代码,我必须通过很多if / case函数。这本身并不是真正的问题,只有很多这些如果有点相同。
在我的代码中,它必须通过if函数,并且如果有匹配则不管它是什么匹配它将不得不通过相同的下一个if。但是根据这两个答案,它必须转到代码的不同部分。
所以对于exmaple:
Switch(A){
case 1:
Switch(B){
case 1: do11thing();
case 2: do12thing();
}
case 2:
Switch(B){
case 1: do21thing();
case 2: do22thing();
}
}
有没有人知道解决方案,而不必在我的代码中多次放置Switch(B)。
答案 0 :(得分:1)
如果函数返回值为2,则可以使用一个,然后在此内部使用所有可能性作为不同的switch case.It将比多个if循环更平滑,更快。
代表: -
if (2 == function1) {
switch(value of function 2)
{
case value_1:
..//do whatever u want;
break;
case value_2:
..//do whatever u want;
break;
default:
//do some error handling;
break;
}
}
答案 1 :(得分:1)
如果你有比可执行代码更多的跳转(在编程状态机时经常发生这种情况),你可以将你的逻辑存储在一些嵌套的Dictionary
,List
和/或数组对象中以下内容:
// Maps A and B values to functionality
var funcs = new[] {
new[] { func00, func01, func02, ... },
new[] { func10, func11, func12, ... },
new[] { func20, func21, func22, ... },
...
};
// Actually runs functionality according to your mapping
funcs[A][B](params);
因此,如果是A=1
和B=2
,则会调用func12
。
当然,您可以在结构中使用lambdas (params) => {}
作为函数。
答案 2 :(得分:0)
你可以做的一件事就是结合案例。例如,假设您有一个字符串值,它是您的外部开关变量,而一个int是内部开关变量。您的原始代码可能是:
switch (theString)
{
case "Foo":
switch (theInt)
{
case 1: DoThing1(); break;
case 2: DoThing2(); break;
// many other cases
}
DoFooThing();
break;
case "Bar":
switch (theInt)
{
case 1: DoThing1(); break;
case 2: DoThing2(); break;
// other cases, same as with "Foo"
}
DoBarThing();
break;
}
您可以组合案例并具有条件:
switch (theString)
{
case "Foo":
case "Bar":
switch (theInt)
{
case 1: DoThing1(); break;
case 2: DoThing2(); break;
// many other cases
}
if (theString == "Foo")
DoFooThing();
else
DoBarThing();
break;
}
您正在描述的逻辑类型,特别是在有很多情况下,可能最好使用查找表来实现。这样做可以更容易地遵循逻辑。设置需要花费更多的时间,但您可以在表格中轻松看到构建完全任何输入值组合会发生什么。