具有OR条件的if语句逻辑

时间:2019-03-25 09:56:39

标签: c# if-statement operators

我必须测试一个条件,当dr["QUALITY"].ToString()的值不为“ A”或dr["QUALITY"].ToString()的值不为“ D”时,仅应执行if块。但是,if块代码在值为“ A”时执行。

string test = dr["QUALITY"].ToString();
if ((!dr["QUALITY"].ToString().Equals("A")) || (!dr["QUALITY"].ToString().Equals("D")))
{
    dr["QUALITY_GRD"] = Calc_Rank(Convert.ToInt32(dr["QUALITY"].ToString()), 0);
    dr["QUALITY_PT"] = Calc_Grade(dr["QUALITY_GRD"].ToString(), 1);
}
else
{
    dr["QUALITY_GRD"] = "";
    dr["QUALITY_PT"] = "";
}

此处,当值为“ A”时,将执行if块代码。我不明白代码有什么问题。请提出建议。谢谢!!!

3 个答案:

答案 0 :(得分:2)

在您的情况下,当QUALITY"A"时,则您的第二部分为if陈述

(!dr["QUALITY"].ToString().Equals("D"))

是真的

所以您的代码应该看起来像这样

string quality = dr["QUALITY"].ToString();
if (quality != "A" && quality != "D")
{
    dr["QUALITY_GRD"] = Calc_Rank(Convert.ToInt32(quality), 0);
    dr["QUALITY_PT"] = Calc_Grade(dr["QUALITY_GRD"].ToString(), 1);
}
else
{
    dr["QUALITY_GRD"] = "";
    dr["QUALITY_PT"] = "";
}

答案 1 :(得分:2)

您需要使用&&代替||

当前读取的代码是非A还是非D

因此,如果您将其传递给A,则它仍然是正确的,因为它不是D

答案 2 :(得分:1)

代码中的错误是OR(||)比较和两个否定条件。检查以下伪代码:

If ( character is not A OR character is not D )
 => Always true.

因此更改与此:

if ((!dr["QUALITY"].ToString().Equals("A")) && (!dr["QUALITY"].ToString().Equals("D")))