2

我有一个包含一些基本地址信息的 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);
    }
}

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

4

7 回答 7

10

之所以

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

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

您正在寻找&&,而不是||在那种情况下:

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

true只有当两个“不等于”都评估为 时,才会出现这种情况true,即该州不是纽约州且该州不是宾夕法尼亚州。

于 2013-09-06T17:55:47.117 回答
5

你想检查它是否不是Pennsylvania,如果不是New York,你必须使用&&(AND)而不是||(OR);

foreach (DataRow row in uwDataTable.Rows)
{
    if ((row[15].ToString() != "New York") && (row[15].ToString() != "Pennsylvania"))
    {
          rowsToDelete.Add(row);
    }
}
于 2013-09-06T17:55:03.483 回答
4

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

您可能希望使用 AND 代替:

if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")
于 2013-09-06T17:56:11.697 回答
3

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

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

像这样的东西...

if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")
于 2013-09-06T17:58:29.530 回答
2

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

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

你想要一个不是纽约也不是宾州的行。使用 or,new york 和 penn 都将评估为 true。

真假 == 真

penn != new york == true AND 纽约 != penn == true

因此,您将永远是真实的。

于 2013-09-06T17:57:01.293 回答
2

您应该使用 AND 运算符

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

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

if (row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania")
于 2013-09-06T17:57:30.483 回答
0

尝试这个:

foreach (DataRow row in uwDataTable.Rows)
            {
                if (!row[15].ToString().ToLower().Equals("new york") && !row[15].ToLower().Equals("pennsylvania"))
                {
                    rowsToDelete.Add(row);
                }
            }
于 2013-09-06T17:58:02.700 回答