【问题标题】:&& 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