我正在使用以下代码行来检查小数是否相等,但它显示语法错误。
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
。
为什么会这样?因为相等运算符接受两个相同类型的参数。a == b
结果为布尔值(true
或false
),您将此结果与c
仍为类型的下一个值进行比较,decimal
并且您无法将 aboolean
与 a进行比较,decimal
因为它们的类型不同。
它应该是:
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
它再次给出一个布尔值,然后将第二个布尔值与
(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)
试试这个
if (ProgramVariables.MSR_AR_System.Equals(ProgramVariables.MSR_AR_EB_1).Equals(ProgramVariables.MSR_AR_EB_2.Equals(ProgramVariables.MSR_AR_EB_3)))
比较运算符返回布尔值,即 True 或 False。因此,第一个比较返回布尔值,并且您正在与十进制进行比较。因此错误。
你可以这样写方法:
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))