Dot-Net

VB.NET 語言和Nothing:為什麼會這樣?

  • June 23, 2009

這是一個關於 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 myObjectIf myObject = Nothing更不明顯。

為什麼 VB.NET 作者的想法正好相反?有什麼提示嗎?

您遇到的問題是 VB.Net 區分了兩種類型的對像比較。即參考和價值比較。

VB.Net 中的“Is”運算符用於參考比較。當所討論的值既是引用類型又是可空值時,可以使用此方法。嘗試以這種方式比較值類型將導致編譯錯誤。

“=”運算符用於值比較。值比較只能用於在其類定義中定義顯式 =、<> 運算符對的類型。等式的實際實現取決於運算符的實現。

C# 採用了不同的方法,它使用 == 進行值和引用比較。使用哪個取決於幾個因素,包括被比較的值的類型和某些相等方法的實現。

引用自:https://stackoverflow.com/questions/1034651