VB.NET:将对象与字符串文字进行比较

时间:2011-02-02 09:33:55

标签: vb.net

这可能只是一个品味问题,但我想知道是否有一种“推荐”方式来比较Object类型的变量(可能是Nothing或具有不同的动态类型而不是String)到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. 则抛出异常
  5. If DirectCast(myObject, String) = "Hello World" Then ... - 如果myObject不是字符串
  6. 则抛出异常

    因此,我能找到的唯一(简单,单一表达)解决方案是使用

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

    对我来说看起来有点笨拙。除了对Nothing进行类型检查或明确检查外,我是否遗漏了任何明显的替代方案?

    (当然,我们正在谈论Option Strict On。)

3 个答案:

答案 0 :(得分:3)

这个怎么样:

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

如果myObject不是字符串,则TryCast将返回Nothing

答案 1 :(得分:3)

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

前者将无条件地调用“Hello World”.Equals,而后者将调用MyObject.Equals,如果MyObject为非null,或者返回false(因为引用的文字不为null)。

请注意,对于设计合理的对象,上述两个都应该是等效的,但是MyObject可能有一个Equals方法,当与字符串“Hello World”相比时,它返回True;如果是,则第二个语句将返回True,而第一个语句将返回False。

答案 2 :(得分:2)

字符串类

上的共享函数如何?
If String.Compare(Trycast(myObject, String), "Hello World") = 0 Then...

如果myObject为Nothing或不是字符串,这也会返回不等式。

相关问题