vb.net - 如何将 ""与 double 进行比较(将 VB 6.0 转换为 VB.NET 的问题)

标签 vb.net vb6

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

If tmpVar <> "" Then

是的,它在 6.0 中运行得很好。
如果 tmpVar 有字符串,则有效。
如果 tmpVar 有 double,它也可以工作。

我认为在 vb 6.0 中,"" 表示类似 null 的内容。 所以无论 tmpVar 有 anyValue,它都有效。但是当我将此程序转换为.Net 时。 已经不行了

因为在.Net中,“”不能与double进行比较。我认为在.Net中 "" 只是字符串,不像 vb 6.0 那样像 null

所以我使用了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 "" 不一样。我在上面给了你例子。因此,如果有人知道这个解决方案,请告诉我。这让我抓狂。

最佳答案

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

我假设 tmpVar 在 VB6 中是 Variant,在 VB.NET 中是 Object
那么编写 VB6 程序的人做得很糟糕,因为将 "" 存储在本来应该是数字的变量中并不是正确的做法,有特殊值 为此目的,空Null

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

Dim tmpVar as Double?
if tmpVar Is Nothing Then
   ...
End If

关于vb.net - 如何将 ""与 double 进行比较(将 VB 6.0 转换为 VB.NET 的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19281709/

相关文章:

vb6 - 更改列属性值

perl - 如何通过 Excel 中的 ActiveX 控件运行 Perl 脚本?

vb.net - 如何在 VB.net(使用结构类型)中从 VB6 重写 "LSet"?

vb6 - 在控制台应用程序中将命令行参数传递给 VB6 IDE

.net - 数据存储对象的性能

mysql - VB.NET 下拉列表未填充所有项目

vb.net - 如何在 vb.net 中序列化和反序列化字典?

vb.net - Vb.Net 中的事件处理程序

excel - 循环读取excel数据

mysql - null 的警报数量小于特定值