在C#if语句中检查多个布尔条件的最佳方法
我的代码(C#)上有3个布尔值和一个取决于布尔值是true
和false
的int32
属性。 什么是最好的方式,以另一种方式实现这一点,而不是如下语句:
if(a && b && !c) d = 1; if(a && !b && !c) d = 2; //etc.. ect...
编辑:3个布尔值必须具有可能的每个组合来设置int32值。
编辑2:对于两个不同的布尔比较,“d”的值可以相同。
最好捕获操作的意图,而不是显式检查布尔值。
例如:
public void Check() { if (HasOrdered()) { // do logic } } private bool HasOrdered() { return a && !b && !c; } private bool HasBooked() { return a && b && !c; }
您可以使用卡诺图来减少方程式并减少ifs。
我认为你现在所做的事情非常好,任何其他解决方案都会优先考虑。
我的偏好,适用的地方是尽可能将支票分开。
if (!a) return; if (!b) return; if (!c) return;
如果您需要在发布函数之前检查某些先决条件,这将非常有用,例如,如果用户已登录,参数是否存在且位于正确的上下文中,以及其他项目。
就像我说的那样可能不适用,但我只是想发表意见
您可以执行@Adriano给出的查找表提示,假设您的lookup_table
填充了索引[0..8]的值:
var index = new [] { a,b,c }.Aggregate(0, (a,i) => return 2*a + (i?1:0)); int d = lookup_table[index];
编辑问题的编辑使这无关紧要: d是什么意思?
如果它是假值的计数(可能来自示例代码),请进行
int d = new [] { a,b,c }.Count(b => !b);
我没有看到你如何做它有什么问题,但如果输出对于多个条件是相同的,你可以通过创建一个真值表并简化条件来简化。
例如,如果d
在任何时候 d
应为0
,则可以简化为:
if(a) if(b && !c) d = 1; if(!b && !c) d = 2; ... else d = 0;
或者如果有一些数学模式(例如a
, b
和c
表示二进制数的三位数),那么你可以进行位算术。
但是,如果你有8个不同的结果( a
, b
和c
每个组合a
),那么你的方法很好。