2010-04-26 54 views
4

在對兩個值執行& &操作時,應優先考慮以下兩項中的哪一項。&&在.NET中操作

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

或者

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

兩者有什麼區別?

+0

看到http://en.wikipedia.org/wiki/De_Morgan%27s_laws – 2010-04-26 10:32:07

回答

5

我個人使用前者,我覺得更容易閱讀,如果儘可能多的信息可能是接近我需要儘可能的地步。

例如,剛纔我想知道你的問題是將表達式放在兩行還是一行上比較好,直到我注意到關於不是和括號的部分。

也就是說,只要它們的含義相同,您的表達式不會。

即。

if (!a && !b) 

是不一樣的:

if (!(a && b)) 

相反:

if (!(a || b)) 
+0

是的,明白了。非常感謝。 – Ram 2010-04-26 10:52:07

1

嗯,這取決於你想要的。他們都做不同的事情,並且在給定的背景下可能是正確的。

0

第一個更可讀,可讀性是這裏最重要的東西。

第二個實際上是否與第一個陳述相同?它不應該是||嗎?

13
(Not A) AND (Not B) 

等於

Not (A And B) 
+2

事實上,貌似德摩根定律得到了牽制。 – Svend 2010-04-26 10:30:01

1

對於只有格式化,我prefere:

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

但如果表達式是真的漫長而完備,你應該定義模特porary變量,以提高可讀性:

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

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

後者還闡明你的意圖,如果你正在做更復雜的布爾表達式:

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

如果你給放了價值,你會看到

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

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