2011-05-05 56 views
0

可能重複:
Why does one often see 「null != variable」 instead of 「variable != null」 in C#?空的檢查方法

有沒有檢查空在以下幾個方面有什麼區別:

object x; 
// more code to work on x 
if (null == x) 
    return; 

object x;  
// more code to work on x 
if (x == null) 
    return; 

我認爲它只是一種風格偏好,並沒有錯(代碼邏輯或性能)與它,但要檢查。我認爲後者更容易閱讀,但我的同事堅持以第一種方式寫它。它使我瘋狂。謝謝。

+0

空的是「參考」,它是沒有意義的把它排在首位。你會怎麼說? 「我踢足球=梅西」或「梅西踢足球=我」。同樣的情況,梅西是參考,你正在與它比較。 ' – 2011-05-05 22:55:32

回答

5

我認爲它只是一種風格偏好

是,它涉及從C/C++的世界裏,顯然這個錯誤是很常見的:

if (x = null) 

所以不是比較這是它引入了一個潛在的細微錯誤的分配。這就是爲什麼他們使用

if (null = x) 

它會引發編譯器錯誤。

在C#中,都是非法的,因此

if (x == null) 

似乎是常見的形式。

0

我更喜歡第二個例子,因爲如你所說,它更易於閱讀。他們將執行相同的操作。

1

不,沒有區別。編譯器會阻止你做if(x = null)太(在一個比較操作變量賦值),所以沒有受益於做if (null == x)

+0

'(比較操作中的變量賦值)' - 不完全,它編譯失敗,因爲它不代表'bool'結果。 'bool a = false; bool b = true;如果(a = b){...}'會編譯得很好。 – 2011-05-05 22:55:50

+0

比較中的賦值只是動態類型的語言中的一個問題,大多數標量甚至複雜類型都可以評估爲布爾值,因此可以正確編譯。 – BoltClock 2011-05-05 22:59:14

0

因爲邁克爾·葡萄汁說的,我在我所有的代碼中使用

if(null == x) {} 

。此外,如果比較變量是一個長引用,將頁面向右伸出並且有一個滾動條移動以查看您正在比較的內容,則更有意義。

另一個原因是,它更容易閱讀,看看你是比較的價值,又名:

if("the answer" == someVariable) 

,因爲「答案」是你在找什麼,變量名可以是混亂和ISN你在找什麼。

0

我喜歡第一個,但是很長一段時間以來,我一直是C語言的好朋友。根據x的值,第一個可以更具可讀性。如果'x'是一個長長的,可怕的,醜陋的表達式,如果短語,簡單句,常量表達式在比較運算符的左側被測試,則更容易挖掘if語句。如果表達式足夠長以包裝多行,您就不必精神上展開表達式,以表示整個事件是無效測試。

if (null == (/*horribly long and convoluted expression*/)) 

更容易理解比它的逆

if ((/*horribly long and convoluted expression*/) == null)