2011-08-10 243 views
3

可能重複:
What is the difference between these (bCondition == NULL) and (NULL==bCondition)?null == x和x == null之間的區別?

我見過的比較這兩種方式。是否存在性能差異或僅僅是個人偏好?

我看到它在這個答案中使用:

What are your favorite extension methods for C#? (codeplex.com/extensionoverflow)

+1

好的 - 這真的只是挑剔。但是,我想知道這裏的所有響應者是否只是編寫答案,或者他們是否已經實際編譯代碼並比較得到的IL代碼以確保它是相同的。 :) –

+3

有一篇文章展示了使用null == x而不是x == null的輕微改進。文章在這裏:http://geekswithblogs.net/manishsati/archive/2010/08/31/difference-between-comparisons-null-x-and-xnull.aspx – Xaisoft

回答

22

在這種情況下,它的個人喜好在C#。

enter image description here

尤達條件句

+1

+1主要用於我的頭像! :P – digEmAll

+0

嘿它是谷歌圖片;) –

+0

+1爲圖像,你正在帶來一些新的東西堆疊在流! –

1

在各方面完全相同。做同樣的事情只是一種顛倒的方式。

1

是否存在性能差異還是僅僅是個人偏好?

不,絕對沒有性能差異。這只是個人喜好的問題。

14

這是C++時代的雛形,您可能會通過使用=而不是==而意外分配變量,它仍然會通過編譯器,因爲您可以將幾乎任何東西都傳遞到C++中進行比較。 不要在C#中使用它,因爲它不會允許你這樣做。

有效C++:

if (p = NULL) // p gets assigned NULL and result is compared to 0

無效C#:

if (p = null) // can only use booleans in test

4

使用null == x防止意外地鍵入錯誤和遺漏一等於符號,並且因此分配,而不是測試一個值。你最終將不會編譯null = x

在任何情況下,使用Object.ReferenceEquals(x, null)可能會更好,因爲它可以防止==重載的情況。

+0

有趣的 - ReferenceEquals適用於Nullable類型。但是,在這種情況下,我沒有看到使用它的價值。我還沒有遇到== null的行爲不如預期的情況。 – TrueWill

+0

@TrueWill。我只看到過一個問題,從那時起我就使用了ReferenceEquals()。我不認爲這很普遍,在我看來,它不那麼可讀,這是一個缺點。但我確實找到了一個有問題的人使用的問題== http://stackoverflow.com/questions/155458/c-object-is-not-null-but-myobject-null-still-return-false – iandotkelly

+0

給定操作符超載和愚蠢,可能會打破許多語言習語。我贊成可讀性,簡單性,並盡我的本分來打破破解這一點的代碼。 – TrueWill

相關問題