3

在 VB 6.0 中,有人制作了 Program。在那个程序中,他使用了

If tmpVar <> "" Then

是的,它在 6.0 中运行良好。
If tmpVar has string, 有用。
If tmpVar has double,它也有效。

我认为在 vb 6.0 中,""就像 null 一样。所以无论 tmpVar 有什么值,它都能正常工作。但是当我将此程序转换为 .Net 时。它不再起作用了

因为在 .Net 中,"" 无法与 double 比较。我认为 In .Net""只是字符串,不像 vb 6.0 那样的 null

所以我用Nothing而不是"". 但它也有问题。

例如当我使用这个

If tmpVar <> Nothing Then

看起来没有问题。但是,如果tmpVar有 number 0,它不起作用,因为他们认为Nothing并且0是相同的。我不希望那样。因为 0 并没有什么不同。但他们认为他们是一样的。

所以我再次改变了我的程序

If tmpVar IsNot Nothing Then

是的。看起来又没有问题了。但是如果tmpVar有“”,它就不起作用。

所以总而言之,在 vb 6.0 中,这""意味着像 null 一样为空。它可以与任何类型进行比较。

但是转换后,在 vb.net 中,这""并不意味着像 null 一样为空。它只是字符串。它无法与双重类型相提并论。即使我更改""Nothing,它与 vb 6.0 也不相同""。我在上面给你举了例子。因此,如果有人知道此解决方案,请告诉我。这让我发疯。

4

2 回答 2

5

不,""只是一个字符串,而不是“null”,但在后台发生的隐式转换可能会让您相信它是“null”。

我假设tmpVar在 VB6 和ObjectVB.NET 中是 Variant。
然后写VB6程序的人做得不好,因为存储""在一个本来就是数字的变量中不是正确的方法,有特殊的值EmptyNull为此目的。

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

Dim tmpVar as Double?
if tmpVar Is Nothing Then
   ...
End If
于 2013-10-09T20:24:44.837 回答
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
于 2013-10-09T20:24:27.810 回答