这可能只是一个品味问题,但我想知道是否有一种“推荐”方式来比较Object
类型的变量(可能是Nothing
或具有不同的动态类型而不是String
)到VB.NET中的字符串文字。
以下选项显然不起作用:
If myObject = "Hello World" Then ...
- 无法编译If myObject Is "Hello World" Then ...
- 测试引用相等,这是错误的If myObject.Equals("Hello World") Then ...
- 如果myObject为Nothing If DirectCast(myObject, String) = "Hello World" Then ...
- 如果myObject不是字符串因此,我能找到的唯一(简单,单一表达)解决方案是使用
If "Hello World".Equals(myObject) Then ...
对我来说看起来有点笨拙。除了对Nothing
进行类型检查或明确检查外,我是否遗漏了任何明显的替代方案?
(当然,我们正在谈论Option Strict On
。)
答案 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或不是字符串,这也会返回不等式。