【问题标题】:How to properly skip a step if 2 conditions are true如果 2 个条件为真,如何正确跳过步骤
【发布时间】:2013-07-01 13:36:00
【问题描述】:

我有两个条件,ShouldCheckForErrors 和 HasErrors

我的代码是

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

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

例如:

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

不起作用,因为当ShouldCheckforErrors 是true,但HasErrors 是false 时,将无法调用PassTest()。 (反之亦然)

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

【问题讨论】:

    标签: c# operators logic conditional-statements


    【解决方案1】:

    您正在寻找De Morgan's Law:

    if (!ShouldCheckForErrors || !HasErrors)
    

    换一种说法:

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

    【讨论】:

    • 根据第一个代码(即“更长”),pass表示两个都是真的,这不是或,而是和。
    • @Tigran:这不是否定的工作方式。 en.wikipedia.org/wiki/De_Morgan%27s_laws
    • 这是个好方法。现在我不确定@Adil 答案是如何编译成的,但我认为这两个条件都在此处检查,如果!ShouldCheckForErrors 评估为true,则不会检查HasErrors
    • 鉴于用户的新手,您可能想在此处解释德摩根定律或其相关性或用途,而不是将相当密集的维基百科文章留给初学者。
    • @Tigran: !(A && B) === (!A || !B)
    【解决方案2】:

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

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

    【讨论】:

    • 在我发布 +1 之前没看到这个
    • 非常干净,但我决定使用(!ShouldCheckForErrors || !HasErrors) 以防止不必要地调用第二个条件。
    【解决方案3】:

    你的逻辑有点不对

    !ShouldCheckForErrors && !HasErrors
    

    不一样

    !(ShouldCheckForErrors && HasErrors)
    

    这就是我相信你想要的

    【讨论】:

      【解决方案4】:

      更简单的情况 -

      if(theOnlyCheck) {
      
      }
      else {
          do();
      }
      

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

      if(!theOnlyCheck) {
          do();
      }
      

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

      用(check1 && check2) 替换theOnlyCheck。不要忘记括号:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2021-12-27
        • 2018-02-08
        • 1970-01-01
        • 2015-04-30
        相关资源
        最近更新 更多