2012-05-11 43 views
2

有時,必須檢查一個值是否與常量相等。在這種情況下,我總是看到這樣的代碼:爲什麼在比較一個值和一個常量之前檢查null?

if (!string.IsNullOrEmpty(text)) 
{ 
    if (text == "Some text here")¹ 
    { 
     // Do something here. 
    } 
} 

在我而言,我寧願寫:

if ("Some text here".Equals(text)) 
{ 
    // Do something here. 
} 

畢竟,如果textnullEquals將返回false,這是預期的。一個常數和一個變量的倒置感覺很奇怪,但對於初學者來說,這仍然是可以理解的,並且避免了,它將與text.Equals("Some text here")一起拋出。

我錯過了什麼嗎?

爲什麼我見過的所有源代碼都使用第一個示例中的語法,而從第二個示例中卻不使用?


¹在真正的代碼,它寧願是一個常量或只讀字段。爲了縮短這些例子,我把這些字符串放在一行中。

+2

我能想象它從Java世界裏==弦上對檢查中碼文字返回false(由於對象引用檢查)到來,但在C#如果你只是檢查,你可以做==相等因爲運算符重載處理null情況就好了。你的第一個例子似乎完全不必要只是(「這裏的一些文字」文本==)做''如果你 –

+0

可能也有興趣在這個問題上; http://stackoverflow.com/questions/44288/differences-in-string-compare-methods-in-c-sharp – dash

回答

10

在這種情況下,我總是看到這樣的代碼:

你認爲是奇怪的和不必要的右,因爲它是。這是一個完全多餘的null或空檢查。坦率地說,我會在代碼審查中告誡那樣的代碼。

if (text == "Some text here") { 
    // Do something here. 
} 

是非常好的,這就是我會用的。

我錯過了什麼嗎?

不,你不會錯過任何東西。

爲什麼我見過的所有源代碼都使用第一個示例中的語法,而從第二個示例中卻不使用?

因爲你在所有錯誤的地方尋找愛情?

5

這個沒有什麼錯。

if (text == "Some text here") 
{ 
    // Do something here. 
} 

沒有必要檢查空/空,因爲它不會是相等的。

如果您希望使用Equals方法,則存在對空值不敏感的版本。

if (string.Equals(text, "Some text here")) 
{ 
    // Do something here. 
} 
0

我會認爲這是人的本性,當你比較平穩,你總是比較「貴」的東西對別人。而不是相反,我認爲同樣的自然思維去C#編碼以及:)

0

我只會使用if (text == "Some text here")。它清晰,簡潔,快速。該IsNullOrEmpty檢查你指的可能是一個(最可能沒用)微優化。

2

你的版本是罰款,只要你有文字或者你知道會不會null東西。

如果,另一方面,你有

if (text1.Equals(text2)) 

那麼顯然你需要抵禦text1null

不過,我會停止使用Equals這裏使用==這消除了對null檢查

if (text1 == text2) 

需要你更喜歡用Equals因爲你的Java根?

相關問題