检查多个布尔值是否具有相同的值



我有三个布尔变量。我需要检查这三个都是真的还是所有三个都是假的。

我可以用"虚拟"方式做到这一点:

bool areSame = false; 
if(a && b && c)    
    areSame = true; 
else if (!a && !b && !c)
    areSame = true;

我想知道是否有另一种更优雅的解决方案。

您也可以在布尔值上使用相等运算符:

bool areSame = (a == b) && (a == c);

当然,你在这里只比较三个,但未来呢?您可能需要在路上的某个地方将十个布尔值相互比较。

    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(false.AllEqual(false, false)); 
                Console.WriteLine(true.AllEqual(false, false));
                Console.WriteLine(true.AllEqual(true, false));
                bool a = true;
                bool b = false;
                bool c = true;
                Console.WriteLine(a.AllEqual(b, c));
                b = true;
                Console.WriteLine(a.AllEqual(b, c));
                Console.ReadLine();
            } 
        }
        static class Extensions
    {
        static public  bool AllEqual(this bool firstValue, params bool[] bools)
        {
            return bools.All(thisBool => thisBool == firstValue);
        }
    }
使用它

怎么样?

areSame = (a == b && b == c);

怎么样:

bool areSame = (a && b && c) || (!a && !b && !c) ? true : false;

这种方法呢?它将允许您传入尽可能多的布尔值,并查看是否满足最小数量的真数。

public static bool AreMinNumberOfTruesMet(int minNumOftrue, params bool[] bools)
{
    var totalTrue = bools.Count(boolean => boolean == true);
    return totalTrue >= minNumOftrue;
}

或者在一行中:

bool allSame = !bools.Any(b => b != bools[0])
//all same
bool allSame = a == b == c == d;
//all false
bool allFalse = a == b == c == d == false;

相关内容

  • 没有找到相关文章

最新更新