重构嵌套的If

0 c# algorithm

假设您有5个返回布尔值的函数,并且取决于函数返回的值,您需要返回一个值.例如

你有函数f1, f2, f3, f4, f5,每个函数不带参数,返回true或false.这为您提供了2 ^ 5种可能性,对于每种可能性,您需要返回一个唯一的数字,如果

f1() = true, f2() = true, f3() = true, f4() = true, f5() = true return 1

f1() = true, f2() = true, f3() = true, f4() = true, f5() = false return 2

f1() = true, f2() = true, f3() = true, f4() = false, f5() = false return 3
..
..
Run Code Online (Sandbox Code Playgroud)

除了使用大量的嵌套if什么是干净的方式这样做?

额外细节:

这是我正在努力解决的问题的简化.基于一些像上面那样工作的函数,我试图确定一个由枚举表示的订单表单的状态.例如我正在做:IfCertainCondition1()和IfCertainCondition2()然后是OrderFormStatus.New,IfCertainCondition1()和NOT IfCertainCondiction2()然后是OrderFormStatus.SomethingElse.这样做有效,但因为有大量的条件,它会使非常重的嵌套if

Dav*_*Yaw 7

您可以将它们组合成一个整数,整数中的每个位表示从一个方法返回的bool.

bool f1, f2, f3, f4, f5;
int combined = f1 ? 0x01 : 0 | f2 ? 0x02 : 0 | f3 ? 0x04 : 0 | f4 ? 0x08 : 0 | f5 ? 0x10 : 0;
return combined;
// or 
int conversionTable[32] = { ... };
return conversionTable[combined];
Run Code Online (Sandbox Code Playgroud)