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

本文关键字:两个 字符串 不起作用 OR 比较 条件 | 更新日期: 2023-09-27 18:30:24

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

这看起来很简单,但无论出于何种原因,"不平等"都太多了。

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

原因

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,即州不是纽约州,州也不是宾夕法尼亚州。

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

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

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

您可能希望改用 AND:

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

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

这为您提供了所有项目,并且您要删除特定的项目。

像这样的东西...

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

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

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

你想要一排不是纽约,也不是宾夕法尼亚州。使用 or,纽约和宾夕法尼亚都将评估为 true。

对或假 == 真

宾夕法尼亚州 != 纽约 == 真 和 纽约 != 宾夕法尼亚 == 真

因此,您将永远得到真实。

你应该使用 AND 运算符

即使只有一个条件为 TRUE,也会执行 OR。因此,对于"纽约",第二个条件将为真,将被删除。

而 AND 仅在两者都为 TRUE 时才执行,

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

试试这个:

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