有没有办法简单地类似真值表?

时间:2016-09-12 10:50:32

标签: c#

有没有简单的方法在代码中使用真值表?它有2个输入和4个结果,如下所示:

enter image description here

我目前的代码是:

private void myMethod(bool param1, bool param2)
{
    Func<int, int, bool> myFunc;
    if (param1)
    {
        if (param2)
            myFunc = (x, y) => x >= y;
        else
            myFunc = (x, y) => x <= y;
    }
    else
    {
        if (param2)
            myFunc = (x, y) => x < y;
        else
            myFunc = (x, y) => x > y;
    }
    //do more stuff
}

3 个答案:

答案 0 :(得分:5)

我建议使用数组,即

  // XOR truth table
  bool[][] truthTable = new bool[][] {
    new bool[] {false, true},
    new bool[] {true, false},
  };

...

  private void myMethod(bool param1, bool param2, bool[][] table) {
    return table[param1 ? 0 : 1][param2 ? 0 : 1];
  }   

答案 1 :(得分:0)

public int myTest(bool a, bool b)
{
  if(!b)
    return 3;
  return a ? 1 : 2;
}

答案 2 :(得分:0)

为了简化代码,您可以使用param1param2作为预定义数组中索引值的位:

private void myMethod(bool param1, bool param2)
{
    Func<int, int, bool>[] myFuncs = {
        (x, y) => x > y,
        (x, y) => x < y,
        (x, y) => x <= y,
        (x, y) => x >= y
    };

    int index = (param1 ? 2 : 0) + (param2 ? 1 : 0);
    Func<int, int, bool> myFunc = myFuncs[index];
    //do more stuff
}

但当然,简单性和可读性是读者的眼​​睛。

如果paramX都是falseindex将是0。如果两者都是trueindex将是3等等......