C# If-Or语句的计算结果为TRUE,而实际上它应该为FALSE

C# If-Or语句的计算结果为TRUE,而实际上它应该为FALSE,c#,if-statement,C#,If Statement,我不知道我在这里错过了什么。。应该很简单 tblCurrent不等于NULL tblCurrent.Rows.Count不等于0 if (tblCurrent != null | tblCurrent.Rows.Count != 0) { //Do something } else { // This is what I want } 它应该看到正确的条件是0,所以它应该返回false并放入else块?我遗漏了什么?正确的答案是| |。 是位OR 你的逻辑需要AND,而不是OR

我不知道我在这里错过了什么。。应该很简单

tblCurrent不等于NULL tblCurrent.Rows.Count不等于0

if (tblCurrent != null | tblCurrent.Rows.Count != 0)
{
    //Do something
}
else
{
    // This is what I want
}
它应该看到正确的条件是0,所以它应该返回false并放入else块?我遗漏了什么?

正确的答案是| |。 是位OR

你的逻辑需要AND,而不是OR

如果tblCurrent不等于null,则tblCurrent!=null的计算结果为true,因此整个OR也将计算为true,因为OR的计算结果为true的条件是且仅当其一条或两条边的计算结果为true

看起来您的逻辑应该使用AND运算符&&而不是OR,如下所示:

if (tblCurrent != null && tblCurrent.Rows.Count != 0) {
    ...
} else {
    ...
}

&&运算符使求值短路,因此即使tblCurrent为null,也不会出现异常。

如果tblCurrent为null,则tblCurrent!=null为true,它不会转到else块。如果tblCurrent!=null,则该条件的计算结果将始终为true。您确定不想使用和&&吗?另外,你应该使用| |而不是|。想想看——你让它检查tblCurrent是否为null,既然tblCurrent不为null,猜猜它是如何计算的?请在发帖之前调查一下。您使用了错误的运算符。@Ron,a与a不同。&&运算符使求值短路,因此即使tblCurrent为null,也不会出现异常。我想这可能是我迷路的地方,因为有时表实际上是空的,我不想同时检查空表上等于0的行table@Ron&&操作符首先检查左侧,并查看是否可以仅基于左侧来决定总体结果。由于当任何一方为false时,AND的计算结果为false,&&知道false&&anythingElse的答案,而不知道anythingElse可能是什么。在您的情况下,当tblCurrent为null时,tblCurrent!=null将计算为false,因此&&将不再进一步,并返回false。无法计算tblCurrent.Rows表达式。这种技巧的正式名称是短路。它实际上不是按位或上下文,因为两个操作数都是布尔值。这只是一个非短路或短路电路。如果操作数是数字,则它将是按位或。
if (tblCurrent != null && tblCurrent.Rows.Count != 0) {
    ...
} else {
    ...
}