1

我有两个条件,ShouldCheckForErrors并且HasErrors

我的代码是

if(ShouldCheckForErrors && HasErrors)
{
    //Do nothing
}
else
{
    PassTest()
}

我觉得这是一个非常冗长的检查。有没有一种方法可以让我无需使用就可以进行单次检查else

例如:

if(!ShouldCheckForErrors && !HasErrors)
{
    PassTest()
}

不起作用,因为那将无法调用PassTest()when ShouldCheckforErrorsis true,但是HasErrorsis false。(反之亦然)

我只是觉得我的逻辑运算符忘记了一些东西。

4

4 回答 4

8

您正在寻找德摩根定律

if (!ShouldCheckForErrors || !HasErrors)

换一种说法:

如果没有错误,或者我们没有检查错误,您应该通过。

于 2013-07-03T18:05:48.943 回答
5

!得到两个条件的结果后使用 not 运算符

if(!(ShouldCheckForErrors && HasErrors))
{
    PassTest();
}
于 2013-07-03T18:05:19.920 回答
2

你的逻辑有点不对

!ShouldCheckForErrors && !HasErrors

不一样

!(ShouldCheckForErrors && HasErrors)

这就是我相信你想要的

于 2013-07-03T18:05:35.030 回答
1

更简单的情况 -

if(theOnlyCheck) {

}
else {
    do();
}

您似乎足够精明,可以缩短检查-

if(!theOnlyCheck) {
    do();
}

但是你只是弄乱了你的操作顺序。

代替. (check1 && check2)_ theOnlyCheck不要忘记括号:

if(!(check1 && check2)) {
    do();
}

现在,如果您不喜欢处理这些括号,您可以遵循德摩根定律: !(a && b)!a || !b. 自己想想看——

if(!check1 || !check2) {
    do();
}
于 2013-07-03T18:16:04.413 回答