【问题标题】:&& Operation in .NET&& .NET 中的操作
【发布时间】:2011-02-12 08:22:23
【问题描述】:

在对两个值进行 && 操作时,应该优先选择以下两个中的哪一个。

 if (!StartTime.Equals(DateTime.MinValue) &&
    !CreationTime.Equals(DateTime.MinValue))

或者

     if (!(StartTime.Equals(DateTime.MinValue) && CreationTime.Equals(DateTime.MinValue))

两者有什么区别?

【问题讨论】:

标签: c# .net logical-operators


【解决方案1】:
(Not A)  AND  (Not B)

等于

Not (A And B)

【讨论】:

  • 确实,德摩根定律似乎偏离了方向。
【解决方案2】:

我个人使用前者,如果尽可能多的信息尽可能接近我需要的点,我会更容易阅读。

例如,刚才我想知道你的问题是把表达式放在两行还是一行更好,直到我注意到关于 not 和括号的部分。

也就是说,只要它们的意思相同,而你的表达方式不一样。

即。

if (!a && !b)

不等于:

if (!(a && b))

而是:

if (!(a || b))

【讨论】:

    【解决方案3】:

    嗯,这取决于你想要什么。他们都做不同的事情,并且在给定的上下文中可能是正确的。

    【讨论】:

      【解决方案4】:

      仅关于格式,我更喜欢:

      if(MyFirstExtremlyLongExpressionWhichBarelyFitsIntoALine
        && MySecondExtremlyLongExpressionWhichBarelyFitsIntoALine
        && MyThirdExtremlyLongExpressionWhichBarelyFitsIntoALine
      ) {
        // ...
      }
      

      但如果表达式真的很长而且很完整,你应该定义临时变量以增强可读性:

      bool condition1 = MyFirstExtremlyLongExpressionWhichBarelyFitsIntoALine;
      bool condition2 = MySecondExtremlyLongExpressionWhichBarelyFitsIntoALine;
      bool condition3 = MyThirdExtremlyLongExpressionWhichBarelyFitsIntoALine;
      
      if(condition1 && condition2 && condition3) {
        // ...
      }
      

      如果你在做更复杂的布尔表达式,后者也阐明了你的意图:

      if((!condition1 && !condition2) && condition3) {
        // ...
      }
      

      【讨论】:

        【解决方案5】:

        第一个更具可读性,可读性是这里最重要的。

        第二个语句实际上等同于第一个语句吗?不应该是||吗?

        【讨论】:

          【解决方案6】:

          如果你输入你会看到的值

          (!1 && !1) == (0 && 0) == 0 (!1 && !0) == (0 && 1) == 0

          !(1 && 1) == !1 == 0 !(1 && 0) == !0 == 1

          【讨论】:

            猜你喜欢
            • 2010-12-24
            • 2021-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多