2010-07-09 40 views
14

最近在以前的項目中,我遇到了VB.NET和C#之間的一個特殊區別。Nothing!= null - 或者是否?

考慮其下面的C#表達式:

null <= 2 

這個表達式這正是我所期望的。 然後相應的VB.NET表達:

Nothing <= 2 

我很驚訝地得知,這實際上表達的計算結果爲真

這似乎是兩種語言之間一個相當基本的設計決策,它肯定被我出去了。

有人能告訴我爲什麼嗎? 是空和沒有一個和相同? 如果是這樣,他們爲什麼表現不同?

+4

null null = 2在C#中產生編譯時警告,並且不會將與此操作對應的IL發送到輸出程序集。 – 2010-07-09 12:33:58

+0

在LINQPAD中嘗試一個表達式 - 想像一下null實際上是一個int?誰的價值恰好爲零。 – 2010-07-09 12:37:10

+0

相關問題(雖然不完全一樣):http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net – 2010-07-09 12:37:39

回答

30

Nothing在VB中評估爲給定類型的默認值。 (有關詳細信息,請參見this link。)

對於整數比較(編譯器將從右邊的操作數假定),Nothing因此將爲00 <= 2對於更明顯的原因是正確的:-)

+2

中那樣比較'null'還值得一提的是,與Is和IsNot運算符結合使用時Nothing也用於空檢查。 – 2010-07-09 12:33:31

+2

完整性:編譯器與C#代碼是什麼? '(object)null'不允許與一個整數進行比較,'Int32'不能爲空...? – 2010-07-09 12:36:22

+0

當我正在尋找答案時,你擊敗了我。你也得到了同樣的鏈接:P – 2010-07-09 12:39:50

相關問題