如果在If函数(或case)中防止

时间:2013-05-01 13:20:20

标签: c# if-statement switch-statement

我正在构建一个代码,我必须通过很多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)。

3 个答案:

答案 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)

如果你有比可执行代码更多的跳转(在编程状态机时经常发生这种情况),你可以将你的逻辑存储在一些嵌套的DictionaryList和/或数组对象中以下内容:

// 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=1B=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;
}

您正在描述的逻辑类型,特别是在有很多情况下,可能最好使用查找表来实现。这样做可以更容易地遵循逻辑。设置需要花费更多的时间,但您可以在表格中轻松看到构建完全任何输入值组合会发生什么。