3つのブール変数があります。3つすべてが真であるか、3つすべてが偽であるかを確認する必要があります。
私はこれを「ダミー」の方法で行うことができます:
bool areSame = false;
if(a && b && c)
areSame = true;
else if (!a && !b && !c)
areSame = true;
他にもっとエレガントな解決策があるかどうか知りたいのですが。
ブール値でも等式演算子を使用できます。
bool areSame = (a == b) && (a == c);
確かに、ここでは3つだけを比較していますが、将来についてはどうでしょうか。将来的には、10個のブール値を互いに比較する必要があるかもしれません。
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;
このアプローチはどうですか?これにより、できるだけ多くのboolを渡して、trueの最小数が満たされているかどうかを確認できます。
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;