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

Mat*_*ght 2 c# datatable conditional

我有一个DataTable和一些基本的地址信息.我试图删除任何不是纽约州或宾夕法尼亚州的州.

所以,这很好用:

foreach (DataRow row in uwDataTable.Rows)
{
    if (row[15].ToString() != "New York" || )
    {
        rowsToDelete.Add(row);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会删除每一行:

foreach (DataRow row in uwDataTable.Rows)
{
    if (row[15].ToString() != "New York" || row[15].ToString() != "Pennsylvania")
    {
        rowsToDelete.Add(row);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 10

之所以

row[15].ToString() != "New York" || row[15].ToString() != "Pennsylvania"
Run Code Online (Sandbox Code Playgroud)

删除每一行row[15].ToString()不能同时等于两个不同的字符串,因此两个"不等于"中的至少一个将要评估true,使得整体OR评估true也是如此.

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

row[15].ToString() != "New York" && row[15].ToString() != "Pennsylvania"
Run Code Online (Sandbox Code Playgroud)

这将是一个true只有当两个"不等于"来评价true,即状态不是纽约和状态不是宾夕法尼亚州.


小智 5

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

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