在VB 6.0中,有人制作了程序。 在该计划中,他使用了
If tmpVar <> "" Then
是的,它在6.0中运作良好
If tmpVar has string
,它有效。
If tmpVar has double
,它也有效。
我认为在vb 6.0中,""
意味着像null一样。
所以无论tmpVar有anyValue,它都有效。但是当我把这个程序转换成.Net时。
它不再起作用了
因为在.Net中,“”无法与双倍比较。我认为在.Net ""
只是字符串不像null那样vb 6.0
所以我使用Nothing
代替""
。但它也有问题。
例如,当我使用此
时If tmpVar <> Nothing Then
看起来没问题。
但是,如果tmpVar
的号码为0
,则它不起作用,因为他们认为Nothing
和0
相同。
我不希望这样。因为0并没有什么不同。但他们认为他们是一样的。
所以我又改变了我的程序
If tmpVar IsNot Nothing Then
呀。看起来好像没问题了。但如果tmpVar
有“”,则无效。
总而言之,在vb 6.0中,这个""
表示空为null。它可以与任何类型进行比较。
但转换后,在vb.net中,这个""
并不意味着像null一样空。它只是字符串。它无法与doubletype相比。即使我将""
更改为Nothing
,也与vb 6.0 ""
不同。我给你上面的例子。所以,如果有人知道这个解决方案,请告诉我。这让我很疯狂。
答案 0 :(得分:5)
不,""
只是一个字符串,而不是“null”,但有implicit conversion happening in the background可能会让您相信它是“空”。
我认为tmpVar
在VB6中是Variant,在VB.NET中是Object
那么编写VB6程序的人做得不好,因为将""
存储在一个有意义的数字变量中并不是正确的方法,有特殊值Empty
和{ {1}}为此目的。
在.NET中执行此操作的惯用方法是使用可空类型:
Null
答案 1 :(得分:2)
由于tmpVar
是Object
,因此您需要对要比较的类型使用TryParse
,如下所示:
Dim number As Double
If Double.TryParse(tmpVar.ToString(), number) Then
' Use number here, because tmpVar could successfully be cast to a Double type
Else
' tmpVar could not successfully be cast to a Double type, so raise exception or message to user
End If