有没有简单的方法在代码中使用真值表?它有2个输入和4个结果,如下所示:
我目前的代码是:
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
}
答案 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)
为了简化代码,您可以使用param1
和param2
作为预定义数组中索引值的位:
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
都是false
,index
将是0
。如果两者都是true
,index
将是3
等等......