检查某些十进制值是否相等

时间:2013-01-24 09:09:58

标签: c#

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

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

什么是正确的方法?

6 个答案:

答案 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会产生一个布尔值(truefalse),您将此结果与仍为c类型的decimal的下一个值进行比较,并且您无法将booleandecimal进行比较,因为它们的类型不同。

答案 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))