1

我正在使用以下代码行来检查小数是否相等,但它显示语法错误。

if (ProgramVariables.MSR_AR_System == ProgramVariables.MSR_AR_EB_1 == ProgramVariables.MSR_AR_EB_2 == ProgramVariables.MSR_AR_EB_3)

什么是正确的方法?

4

6 回答 6

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

为什么会这样?因为相等运算符接受两个相同类型的参数。a == b结果为布尔值(truefalse),您将此结果与c仍为类型的下一个值进行比较,decimal并且您无法将 aboolean与 a进行比较,decimal因为它们的类型不同。

于 2013-01-24T09:12:44.033 回答
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)
于 2013-01-24T09:12:05.580 回答
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)
于 2013-01-24T09:16:04.260 回答
0

试试这个

if (ProgramVariables.MSR_AR_System.Equals(ProgramVariables.MSR_AR_EB_1).Equals(ProgramVariables.MSR_AR_EB_2.Equals(ProgramVariables.MSR_AR_EB_3)))
于 2013-01-24T09:16:52.423 回答
0

比较运算符返回布尔值,即 True 或 False。因此,第一个比较返回布尔值,并且您正在与十进制进行比较。因此错误。

于 2013-01-24T09:21:01.560 回答
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))
于 2013-01-24T09:34:36.433 回答