Dot-Net
VB.NET 語言和Nothing:為什麼會這樣?
這是一個關於 VB.NET 語言的問題。因為我每天都在使用它,所以我只是試圖了解它的一些構造背後的動機。
我剛剛發現這條線:
If myObject Is Nothing then和這個一樣正確:
If Nothing Is myObject Then結果相同。使用 ildasm,我們可以看到這些行被翻譯成:
if myObject = null then和
if null = myObject then好吧,但是,在 VB.NET 中,您不能編寫:
if myObject = Nothing Then編譯器不會接受。
嗯,對我來說,If Nothing Is myObject比If myObject = Nothing更不明顯。
為什麼 VB.NET 作者的想法正好相反?有什麼提示嗎?
您遇到的問題是 VB.Net 區分了兩種類型的對像比較。即參考和價值比較。
VB.Net 中的“Is”運算符用於參考比較。當所討論的值既是引用類型又是可空值時,可以使用此方法。嘗試以這種方式比較值類型將導致編譯錯誤。
“=”運算符用於值比較。值比較只能用於在其類定義中定義顯式 =、<> 運算符對的類型。等式的實際實現取決於運算符的實現。
C# 採用了不同的方法,它使用 == 進行值和引用比較。使用哪個取決於幾個因素,包括被比較的值的類型和某些相等方法的實現。