如何比较“”与double(将VB 6.0转换为VB.NET的问题)

时间:2013-10-09 20:14:55

标签: vb.net vb6

在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,则它不起作用,因为他们认为Nothing0相同。 我不希望这样。因为0并没有什么不同。但他们认为他们是一样的。

所以我又改变了我的程序

If tmpVar IsNot Nothing Then

呀。看起来好像没问题了。但如果tmpVar有“”,则无效。

总而言之,在vb 6.0中,这个""表示空为null。它可以与任何类型进行比较。

但转换后,在vb.net中,这个""并不意味着像null一样空。它只是字符串。它无法与doubletype相比。即使我将""更改为Nothing,也与vb 6.0 ""不同。我给你上面的例子。所以,如果有人知道这个解决方案,请告诉我。这让我很疯狂。

2 个答案:

答案 0 :(得分:5)

不,""只是一个字符串,而不是“null”,但有implicit conversion happening in the background可能会让您相信它是“空”。

我认为tmpVar在VB6中是Variant,在VB.NET中是Object 那么编写VB6程序的人做得不好,因为将""存储在一个有意义的数字变量中并不是正确的方法,有特殊值Empty和{ {1}}为此目的。

在.NET中执行此操作的惯用方法是使用可空类型:

Null

答案 1 :(得分:2)

由于tmpVarObject,因此您需要对要比较的类型使用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