最近在以前的項目中,我遇到了VB.NET和C#之間的一個特殊區別。Nothing!= null - 或者是否?
考慮其下面的C#表達式:
null <= 2
這個表達式假這正是我所期望的。 然後相應的VB.NET表達:
Nothing <= 2
我很驚訝地得知,這實際上表達的計算結果爲真
這似乎是兩種語言之間一個相當基本的設計決策,它肯定被我出去了。
有人能告訴我爲什麼嗎? 是空和沒有一個和相同? 如果是這樣,他們爲什麼表現不同?
最近在以前的項目中,我遇到了VB.NET和C#之間的一個特殊區別。Nothing!= null - 或者是否?
考慮其下面的C#表達式:
null <= 2
這個表達式假這正是我所期望的。 然後相應的VB.NET表達:
Nothing <= 2
我很驚訝地得知,這實際上表達的計算結果爲真
這似乎是兩種語言之間一個相當基本的設計決策,它肯定被我出去了。
有人能告訴我爲什麼嗎? 是空和沒有一個和相同? 如果是這樣,他們爲什麼表現不同?
Nothing
在VB中評估爲給定類型的默認值。 (有關詳細信息,請參見this link。)
對於整數比較(編譯器將從右邊的操作數假定),Nothing
因此將爲0
。 0 <= 2
對於更明顯的原因是正確的:-)
中那樣比較'null'還值得一提的是,與Is和IsNot運算符結合使用時Nothing也用於空檢查。 – 2010-07-09 12:33:31
完整性:編譯器與C#代碼是什麼? '(object)null'不允許與一個整數進行比較,'Int32'不能爲空...? – 2010-07-09 12:36:22
當我正在尋找答案時,你擊敗了我。你也得到了同樣的鏈接:P – 2010-07-09 12:39:50
null null = 2在C#中產生編譯時警告,並且不會將與此操作對應的IL發送到輸出程序集。 – 2010-07-09 12:33:58
在LINQPAD中嘗試一個表達式 - 想像一下null實際上是一個int?誰的價值恰好爲零。 – 2010-07-09 12:37:10
相關問題(雖然不完全一樣):http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net – 2010-07-09 12:37:39