当前位置 : 主页 > 编程语言 > c语言 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-24
在VB 6.0中,有人制作了程序. 在那个节目中,他使用了 If tmpVar "" Then 是啊它在6.0中运作良好. 如果tmpVar有字符串,它可以工作. 如果tmpVar有两倍,它也可以. 我认为在vb 6.0中,“”意味着像null一
在VB 6.0中,有人制作了程序.
在那个节目中,他使用了

If tmpVar <> "" Then

是啊它在6.0中运作良好.
如果tmpVar有字符串,它可以工作.
如果tmpVar有两倍,它也可以.

我认为在vb 6.0中,“”意味着像null一样.
所以无论tmpVar有anyValue,它都有效.但是当我把这个程序转换成.Net时.
它不再起作用了

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

所以我使用了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“”也不相同.我给你上面的例子.所以,如果有人知道这个解决方案,请告诉我.这让我很疯狂.

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

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

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

Dim tmpVar as Double?
if tmpVar Is Nothing Then
   ...
End If
网友评论