我使用以下代码行来检查小数是否相等但显示语法错误。
if (ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1 == ProgramVariables.MSR_AR_EB_2 == ProgramVariables.MSR_AR_EB_3)
什么是正确的方法?
答案 0 :(得分:1)
你不能做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
。
为什么会这样?因为equality operator接受两个相同类型的参数。 a == b
会产生一个布尔值(true
或false
),您将此结果与仍为c
类型的decimal
的下一个值进行比较,并且您无法将boolean
与decimal
进行比较,因为它们的类型不同。
答案 1 :(得分:0)
应该是:
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)
答案 2 :(得分:0)
==
运算符是二元运算符,从左到右进行求值。这意味着,它首先评估
ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1
给出一个布尔值,然后将此布尔值与
进行比较(true or false) == ProgramVariables.MSR_AR_EB_2
再次给出一个布尔值,然后将第二个布尔值与
进行比较(true or false) == ProgramVariables.MSR_AR_EB_3
您收到错误,因为您比较了不兼容类型的值。
比较多个值的正确方法是通过逻辑&&
(和)运算符组合它们,例如
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)
答案 3 :(得分:0)
试试这个
if (ProgramVariables.MSR_AR_System.Equals(ProgramVariables.MSR_AR_EB_1).Equals(ProgramVariables.MSR_AR_EB_2.Equals(ProgramVariables.MSR_AR_EB_3)))
答案 4 :(得分:0)
比较运算符返回布尔值,即True或False。因此,第一次比较返回布尔值,并且您将与十进制进行比较。因此错误。
答案 5 :(得分:0)
您可以编写如下方法:
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))