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()と、同時に2つの異なる文字列に等しくなることはできません。したがって、2つの「等しくない」のうち少なくとも1つは に評価されtrue、全体も同様ORに評価さtrueれます。

を探していますが、その状態&&ではありません||:

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

これはtrue、両方の「等しくない」が と評価されるtrue場合、つまり、州がニューヨークではなく、州がペンシルベニアでない場合にのみ使用されます。

于 2013-09-06T17:55:47.117 に答える
5

そうでないかどうかを確認したい場合、そうでないPennsylvania場合は、(OR)ではなく (AND)New Yorkを使用する必要があります。&&||

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 と評価されます。

真または偽 == 真

ペン != ニューヨーク == 真 AND ニューヨーク != ペン == 真

したがって、あなたは常に真実になります。

于 2013-09-06T17:57:01.293 に答える
2

AND 演算子を使用する必要があります

OR は、1 つの条件のみが TRUE の場合でも実行されます。したがって、「ニューヨーク」の場合、2 番目の条件が真になり、削除されます。

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 に答える