在c# if语句中检查多个布尔条件的最佳方法
本文关键字:条件 布尔 最佳 方法 if 语句 检查 | 更新日期: 2023-09-27 18:08:21
我有3个布尔值在我的代码(c#)和一个int32
属性,这取决于什么布尔值是true
和false
。除了if语句之外,最好的方法是什么呢?
if(a && b && !c)
d = 1;
if(a && !b && !c)
d = 2;
//etc.. ect...
编辑:这三个布尔值必须有所有可能的组合来设置int32值。
编辑2:对于两个不同的布尔比较,"d"的值可以是相同的。
最好捕获操作的意图,而不是显式地检查布尔值。
例如:public void Check()
{
if (HasOrdered())
{
// do logic
}
}
private bool HasOrdered()
{
return a && !b && !c;
}
private bool HasBooked()
{
return a && b && !c;
}
你可以用卡诺图来简化你的方程,减少if。
https://en.wikipedia.org/wiki/Karnaugh_map我认为你现在做的很好,任何其他解决方案都取决于你的偏好。
我的偏好是,如果可能的话,它适用于将支票分开。
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];
Edit这个问题的Edit使它无关紧要: d是什么意思?
如果是假值的计数(可能来自示例代码),则将其设为
int d = new [] { a,b,c }.Count(b => !b);
我看不出有什么不对的地方,但是如果对于多个条件的输出是相同的,那么可以通过创建真值表和简化条件来简化。
例如,如果d
应该是0
任何时候 a
为假,你可以简化为:
if(a)
if(b && !c)
d = 1;
if(!b && !c)
d = 2;
...
else
d = 0;
或者如果存在一些数学模式(例如a
, b
和c
表示二进制数的三位数字),那么您可以使用位算术。
但是,如果您有8个不同的结果(a
, b
和c
的每个组合一个),那么您的方法是好的。