2009-11-16 113 views
1

Possible Duplicate:
== Operator and operandsC#布爾表達式求值順序

Possible Duplicates:
Is there any difference between if(a==5) or if(5==a) in C#?
== Operator and operands

好吧,這可能是愚蠢的問題,但在谷歌搜索(不能似乎實際搜索即使報價精確短語)

如果什麼什麼差別有

之間

if(false == <somecondition>){

if(<somecondition> == false){

in C#?我熟悉C#的表情評價;以及瞭解秩序將如何明智的,如果你在做一樣的東西:

if(AccountIsInvalid || AccountIsUnregistered)

我不需要一個巨大的教訓,但想明白爲什麼有些人喜歡做與false==....路線的東西。

+4

很多...的重複...現在看... – 2009-11-16 22:43:08

+2

當然,使用'if(!)'並且它變成一個非問題; -p – 2009-11-16 22:43:51

+0

一個重複在這裏 - http://stackoverflow.com/questions/797162/is-there-any-difference-between-ifa5-or-if5a-in-c-closed – ChrisF 2009-11-16 22:45:23

回答

3

就我個人而言,我從不比較任何錯誤或真實。

我會去:

if (!somecondition) 

或:

if (somecondition) 
3

在C便有可能出現,也許,某種原因,要做到這一點,你可以很容易地犯了一個錯誤,並使用賦值運算符而不是比較運算符,但在C#中它不應該有任何區別 - 如果使用賦值運算符,則會收到編譯警告。如果賦值是一個不同的類型(比如int),那麼會導致錯誤,因爲結果不會是if語句的合法表達式。

我寧願它是

if (!<somecondition>) 
{ 
    ... 
} 

,而不是一個比較虛假的(或真實的,對於這個問題)。

+0

這是一個警告,不是一個錯誤:'bool b; if(b = true){Console.WriteLine(「abc」); }' – 2009-11-16 22:50:26

+0

@Marc - 感謝您的澄清。這在bool變量的情況下肯定是正確的。我沒有考慮過。我想我太習慣於在其他值類型的環境中看到它 - 這將是一個錯誤。 – tvanfosson 2009-11-16 22:54:40

+0

啊,夠公平的; --p事實上,C中傾向於把任何非零的東西視爲真實是一種痛苦。 – 2009-11-16 22:57:07

0

在C#中這並不重要,就像在c/C++中一樣,因爲條件必須計算爲布爾值。

+0

不*完全*真實的...他們必須有一個隱式轉換爲布爾值,或一個真正的函數。還要注意,賦值的結果仍然是bool,並且工作... – 2009-11-16 22:48:06

+0

考慮:'bool b; if(b = true){Console.WriteLine(「abc」); }' – 2009-11-16 22:50:58

+0

真的夠了,我應該說沒關係,「儘可能多」,因爲你不能在C#中意外執行以下操作: int i; if(i = 0){...} – 2009-11-16 23:56:29

1

進行任何優化或短路之前,編譯器需要解決<somecondition>truefalse值,因此沒有理由爲什麼編譯器會計算表達式<somecondition> == falsefalse == <somecondition>任何不同。

這肯定只是一個風格和樣式的問題。