2014-03-06 48 views
-1

我試圖檢查參數是否爲null,我發現在我的腦海的一個問題: 有什麼區別:之間的差異(目標)O == NULL和(((對象)O)== NULL

if ((object) o == null) ... 

if (((object) o) == null) ... 

編輯:變量o可以是任何引用類型的(具有重載==操作上不)

+8

沒什麼區別,鑄造之前比較 – Andrei

+0

這只是一種風格上的差異,代碼是等價的。與'=='相比,Casting具有更高的運算符優先級。對於那些不記憶優先表的人來說,明確的括號更容易理解。 – CodesInChaos

+9

那麼,示例2不會編譯,因爲它具有不平衡的'()'。 –

回答

2
if ((object) o) == null) ... 

是一個錯誤。也許你想寫

if (((object) o) == null) ... 

所以你投oObject那麼你測試是否等於null

這是除了在if (((object) o) == null) ...你與()

使其明確(對人友好的)同樣的事情

所有這些符號完成相同的測試。

+0

所以在生成的IL中沒有任何區別? – zgnilec

+0

沒什麼區別!如果(o == null)' – Bellash

+1

如果(o == null)使用運算符==在對象o上,如果它已經重載了那個運算符 – zgnilec

-2

兩者都是相同的。

第一種情況 - 在鑄造前進行比較。首先將它與null比較,然後轉換爲Object。

第二種情況 - 鑄造比較前。首先它會將o轉換爲Object,然後將其與null進行比較。

+0

怎麼回事?鑄造總是在比較之前出現。 – Bellash

+0

我沒有得到你的問題.. – Arjit

+0

我的意思是鑄造具有較高的運算符優先級比'=='運算符。在所有情況下,即使沒有'()',比較之前也會進行比較。 – Bellash

相關問題