4

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

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

或者

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

两者有什么区别?

4

6 回答 6

13
(Not A)  AND  (Not B)

不等于_

Not (A And B)
于 2010-04-26T10:28:57.280 回答
5

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

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

也就是说,只要它们的含义相同,而您的表达方式则不然。

IE。

if (!a && !b)

不一样:

if (!(a && b))

相当:

if (!(a || b))
于 2010-04-26T10:29:30.220 回答
1

仅关于格式,我更喜欢:

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

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

bool condition1 = MyFirstExtremlyLongExpressionWhichBarelyFitsIntoALine;
bool condition2 = MySecondExtremlyLongExpressionWhichBarelyFitsIntoALine;
bool condition3 = MyThirdExtremlyLongExpressionWhichBarelyFitsIntoALine;

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

如果您正在执行更复杂的布尔表达式,后者还阐明了您的意图:

if((!condition1 && !condition2) && condition3) {
  // ...
}
于 2010-04-26T10:47:52.493 回答
1

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

于 2010-04-26T10:28:08.183 回答
0

如果您输入值,您将看到

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

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

于 2010-04-26T10:49:21.133 回答
0

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

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

于 2010-04-26T10:28:32.353 回答