条件 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);
}
}
这看起来很简单,但无论出于何种原因,"不平等"都太多了。
原因
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);
}
}