在c# if语句中检查多个布尔条件的最佳方法

本文关键字:条件 布尔 最佳 方法 if 语句 检查 | 更新日期: 2023-09-27 18:08:21

我有3个布尔值在我的代码(c#)和一个int32属性,这取决于什么布尔值是truefalse。除了if语句之外,最好的方法是什么呢?

if(a && b && !c)
   d = 1;
if(a && !b && !c)
   d = 2;
//etc.. ect...

编辑:这三个布尔值必须有所有可能的组合来设置int32值。

编辑2:对于两个不同的布尔比较,"d"的值可以是相同的。

在c# if语句中检查多个布尔条件的最佳方法

最好捕获操作的意图,而不是显式地检查布尔值。

例如:

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, bc表示二进制数的三位数字),那么您可以使用位算术。

但是,如果您有8个不同的结果(a, bc的每个组合一个),那么您的方法是好的。