-5

我正在构建一个代码,我必须通过很多 if/case 函数。这本身并不是一个真正的问题,只是其中很多如果是一样的。

在我的代码中,它必须通过一个 if 函数,如果有一个匹配,那么它是什么匹配都无关紧要,它必须在下一个 if 中进行相同的处理。但是根据这两个答案,它必须转到代码的不同部分。

例如:

    Switch(A){

    case 1:
     Switch(B){
      case 1: do11thing();
      case 2: do12thing();
     }

    case 2:
     Switch(B){
      case 1: do21thing();
      case 2: do22thing();
     }

}

有谁知道解决方案,而不必在我的代码中多次放置 Switch(B)。

4

3 回答 3

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=2func12调用 。

当然,您可以(params) => {}在结构中使用 lambda 作为函数。

于 2013-05-01T13:59:56.387 回答
1

您可以将一个 if 用于返回值 2 的函数,然后在此 if 中使用所有可能性作为不同的 switch case。这将比多个 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;
}

}

于 2013-05-01T13:32:19.293 回答
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;
}

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

于 2013-05-01T14:00:57.357 回答