次のコード行を使用して、小数が等しいかどうかを確認していますが、構文エラーが表示されています。
if (ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1 == ProgramVariables.MSR_AR_EB_2 == ProgramVariables.MSR_AR_EB_3)
正しい方法は?
次のコード行を使用して、小数が等しいかどうかを確認していますが、構文エラーが表示されています。
if (ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1 == ProgramVariables.MSR_AR_EB_2 == ProgramVariables.MSR_AR_EB_3)
正しい方法は?
あなたはただすることはできませんA == B == C == D
。&&
次のように (AND) 演算子を使用する必要があります。
if (a == b && b == c && c == d && d == e)
{
// Do something
}
つまりif a equals b AND b equals c AND c equals d AND d equals e then
。
なぜこれが起こるのですか?等値演算子は同じ型の 2 つの引数を取るためです。a == b
結果はブール値 (true
またはfalse
) になり、この結果を次の値と比較しますc
が、同じ型ではないため、 aと a をdecimal
比較することはできません。boolean
decimal
比較演算子はブール値、つまり True または False を返します。したがって、最初の比較はブール値を返し、10 進数と比較していることを示します。したがって、エラー。
そのはず:
if (ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1
&& ProgramVariables.MSR_AR_EB_1 == ProgramVariables.MSR_AR_EB_2
&& ProgramVariables.MSR_AR_EB_2 == ProgramVariables.MSR_AR_EB_3)
この==
演算子は二項演算子で、左から右に評価されます。つまり、最初に評価します
ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1
これはブール値を与え、このブール値は次と比較されます
(true or false) == ProgramVariables.MSR_AR_EB_2
これもブール値を与え、この 2 番目のブール値を比較します
(true or false) == ProgramVariables.MSR_AR_EB_3
互換性のない型の値を比較すると、エラーが発生します。
複数の値を比較する正しい方法は、論理&&
(and) 演算子でそれらを結合することです。たとえば、
if (ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1
&& ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_2
&& ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_3)
これを試して
if (ProgramVariables.MSR_AR_System.Equals(ProgramVariables.MSR_AR_EB_1).Equals(ProgramVariables.MSR_AR_EB_2.Equals(ProgramVariables.MSR_AR_EB_3)))
次のようにメソッドを書くことができます:
public static bool AllEqual<T>(params T[] values)
where T : struct
{
if (values.Length < 2)
return true;
T first = values[0];
for (int i = 1; i < values.Length; i++)
{
if (!values[i].Equals(first))
return false;
}
return true;
}
そして、それを使用してすべての値を比較します。
if (AllEqual(ProgramVariables.MSR_AR_System,
ProgramVariables.MSR_AR_EB_1,
ProgramVariables.MSR_AR_EB_2,
ProgramVariables.MSR_AR_EB_3))