我有一个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);
}
}
这看起来很简单,但无论出于何种原因,“不平等”的情况太多了。
答案 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);
}
}