在VB 6.0中,有人制作了程序. 在那个节目中,他使用了 If tmpVar "" Then 是啊它在6.0中运作良好. 如果tmpVar有字符串,它可以工作. 如果tmpVar有两倍,它也可以. 我认为在vb 6.0中,“”意味着像null一
在那个节目中,他使用了
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