2010-10-12 114 views
2
If Object.Value IsNot "Something" Then 

您可以這樣做,或者是否有某些情況下無法正常工作?不知道這是否應該只用於整數和布爾值。VB.NET不適用於字符串比較

謝謝!

回答

5

我不確定這是否有效,但如果這樣做,它會是一個非常糟糕的主意使用。 VB.Net中的IsIsNot運算符做參考比較。在處理String值時,您幾乎總是希望通過=<>進行值比較。

參考比較會告訴您它是否字面上指向同一個對象。在.NET中它很可能爲同一相同字符串中2個對象,允許混淆的情況下,如以下

Function CreateFoo() As String 
    return "foo" 
End Function 

Dim str1 = "foo" 
Dim str2 = CreateFoo() 
if str1 Is str2 Then 
    ' This is possible 
Else 
    ' This is also possible 
End If 

值比較捕獲提供了更多的理智在這裏

Dim str1 = "foo" 
Dim str2 = CreateFoo() 
if str1 = str2 Then 
    ' This will run 
Else 
    ' This is simply not possible 
End If 
3

這會告訴你Object.Value和「Something」是否是字面上相同的對象。

99.999%的時間,你不關心這一點。你所關心的只是它們在語義上是否相等,也就是說它們都包含「Something」這個詞。

1

從文檔:「 IsNot運算符確定兩個對象引用是否引用不同的對象。「

因此,您不希望比較字符串,因爲兩個相同的字符串實際上不可能引用同一個對象。這隻會發生在編譯時常量,被執行或同一變量的兩個副本。