条件OR或在比较两个字符串时不起作用

时间:2013-09-06 17:52:02

标签: c# datatable conditional

我有一个DataTable,其中包含一些基本的地址信息。我试图删除任何不是纽约州或宾夕法尼亚州的州。

所以,这很好用:

foreach (DataRow row in uwDataTable.Rows)
{
    if (row[15].ToString() != "New York" || )
    {
        rowsToDelete.Add(row);
    }
}

但是,这会删除每一行:

foreach (DataRow row in uwDataTable.Rows)
{
    if (row[15].ToString() != "New York" || row[15].ToString() != "Pennsylvania")
    {
        rowsToDelete.Add(row);
    }
}

这看起来很简单,但无论出于何种原因,“不平等”的情况太多了。

7 个答案:

答案 0 :(得分:10)

原因

row[15].ToString() != "New York" || row[15].ToString() != "Pennsylvania"

删除每一行row[15].ToString()不能同时等于两个不同的字符串,因此两个“不等于”中的至少一个将评估为true,从而使OR成为true {1}}也评估为&&

在这种情况下,您正在寻找||,而不是row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania"

true

只有当“不等于”评价为true时才会{{1}},即该州不是纽约州且州不是宾夕法尼亚州。

答案 1 :(得分:5)

您想检查它是否Pennsylvania以及它是否New York,因此您必须使用&&(AND)而不是||(或者);

foreach (DataRow row in uwDataTable.Rows)
{
    if ((row[15].ToString() != "New York") && (row[15].ToString() != "Pennsylvania"))
    {
          rowsToDelete.Add(row);
    }
}

答案 2 :(得分:4)

您的删除方法是删除不是“纽约”或不是“宾夕法尼亚”的每一行。由于纽约的某些东西也不能是宾夕法尼亚州(反之亦然),因此OR条件将始终得到满足,并且该行将被标记为删除。

您可能希望使用AND代替:

if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")

答案 3 :(得分:3)

你的OR(||)应该是AND(&&)。

那就是给你所有的项目,你想要删除特定的项目。

像这样......

if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")

答案 4 :(得分:2)

你实际上应该在这里使用AND;

 if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")

你想要的一行不是纽约而不是宾夕法尼亚大学。随着或,纽约和宾州将评估为真。

真或假==真

penn!= new york == true AND new york!= penn == true

因此,你永远都会成真。

答案 5 :(得分:2)

您应该使用AND运算符

即使只有一个条件为TR,也会执行OR。所以对于“纽约”,第二个条件将成立,它将被删除。

而只有两者都为TRUE才会执行AND,

if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")

答案 6 :(得分:0)

试试这个:

foreach (DataRow row in uwDataTable.Rows)
            {
                if (!row[15].ToString().ToLower().Equals("new york") && !row[15].ToLower().Equals("pennsylvania"))
                {
                    rowsToDelete.Add(row);
                }
            }