2011-02-02 59 views
2

這可能只是一個口味的問題,但我想知道是否有一個「推薦」的方式來比較Object類型的變量(可能是Nothing或有一個不同於String的動態類型)轉換爲VB.NET中的字符串字面值。VB.NET:比較一個對象到字符串文字

以下選項顯然是行不通的:

  1. If myObject = "Hello World" Then ... - 不會編譯
  2. If myObject Is "Hello World" Then ... - 測試參考平等,這是錯誤的
  3. If myObject.Equals("Hello World") Then ... - 拋出一個異常如果myObject是Nothing
  4. If DirectCast(myObject, String) = "Hello World" Then ... - 如果myObject不是字符串,則拋出異常

因此,唯一(簡單的單表達)溶液我能找到是使用

If "Hello World".Equals(myObject) Then ... 

看起來有點笨拙我。除了進行類型檢查或明確檢查Nothing之外,我是否錯過任何明顯的替代方法?

(當然,我們談論Option Strict On

回答

3

如何:

If TryCast(myObject, String) = "Hello World" Then 

如果myObject不是一個字符串,然後TryCast將返回Nothing

2

如何String類

If String.Compare(Trycast(myObject, String), "Hello World") = 0 Then... 

這也將返回不平等,如果myObject的是沒有或不是一個字符串的共享功能。

+0

謝謝。與Guido的解決方案相比,使用String.Compare(...)= 0`有什麼優勢? – Heinzi 2011-02-02 10:22:32

3
Object.Equals("Hello World", myObject) -or- 
Object.Equals(myObject, "Hello World")

前者將無條件調用的「Hello World」 .Equals,而後者將調用MyObject.Equals如果myObject的非空,否則返回false(因爲引用的文字不爲空)。請注意,對於設計合理的對象,上述兩者應該是等價的,但MyObject可能有一個Equals方法,該方法在與字符串「Hello World」相比時返回True。如果是這樣,第二個語句將返回True,而第一個語句將返回False。

+0

你確定嗎?根據[文檔](http://msdn.microsoft.com/en-us/library/w4hkze5k.aspx),`Object.Equals(obj1,obj2)`只是檢查引用的相等性(不適合字符串比較)。是的,它提到了在派生類中重寫此功能,但這沒有意義,因爲靜態方法不能被覆蓋... – Heinzi 2011-03-29 17:46:15