装配中的脑袋

用程序装配大脑,再用大脑装配程序
随笔 - 118, 评论 - 1214, 引用 - 11

导航

工具

关于

如果想发较大的信件,请用Ninputer @ gmail.com

不要在我的Blog评论中张贴广告,除非同意向我付款。

标签

每月存档

广告



访客

 

(注:这里说的=指的是判断等值的运算符,而不是赋值语句)

我们都知道Nothing代表空引用,代表C#中的null,在C#中我们判断是否空引用经常使用a == null这样写法,那么VB中呢,是否也可以写成 a = Nothing呢?答案是不行!判断是否空引用必须使用Is Nothing而不是= Nothing。VB与C#不一样,=符号只用于判断值的等价,不管是否值类型都是这样。在Option Strict打开的时候,未重载等值判断运算符的引用类型对象间都不允许使用=号。而Is运算符则总是用于引用比较,不能用于值类型。即时Option Strict关闭的时候,=运算符也会默认执行值的判断而不是引用的判断。那么是否空引用的问题显然是应该用Is Nothing,但为什么还可以写= Nothing呢,他代表什么?

原来VB的Nothing不仅仅表示空引用,而可以表示值类型类型的初始值。下面的代码在C#中是无法成立的。

Dim i As Integer = Nothing

i并不是被设置为空引用,而是0,Integer的初始值。所以,如果将=用于Nothing,将进行与该类型初始值的比较,只有Is Nothing才能进行空引用的测试。而如果要测试是否等于初始值,我们直接用那种值类型的初始值的字面量更好,无须使用Nothing。比如If a = 0显然比If a = Nothing来的清楚。所以无论在任何语境下,都不要将=运算符用于 Nothing,特别是String类型的对象。初学者更要牢记这一点。


随贴广告(测试期)
相关文章

打印 | 张贴于 2004-08-02 10:42:00 | Tag:闲话集锦

留言反馈

re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
vb6里判断一个变量存在否--

if IsNull(y) then
...
else
...
end if
2005-09-15 11:56:00 | [匿名用户:mrk]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
VB6里面  null 和 empty 和 nothing 到底什么关系啊?
2005-09-05 16:43:00 | [匿名用户:搞不懂]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
null 和 empty 和 nothing 到底什么关系啊?
2005-09-05 16:41:00 | [匿名用户:搞不懂]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
@ashuai
Use 'IsMissing' function to test if a optional parameter is not provided.
2004-08-05 11:04:00 | [匿名用户:Ninputer]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
请问在vb6里判断一个变量存在否,用什么方法可以做到~
试过null和nothing都不行 >.<

function fun(x as Integer, optional y as Integer)
if y存在 then
...
else
...
end if
end function
2004-08-04 17:03:00 | [匿名用户:ashuai]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
@ryan_fu

我这里说的=是判断相等的运算符,而不是赋值语句。
2004-08-02 14:01:00 | [匿名用户:Ninputer]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
似乎=Nothing是用在释放Object时吧,类似于:
Set d as Object
d=Nothing
2004-08-02 13:51:00 | [匿名用户:ryan_fu]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
Date是值类型,没有等于空引用的时候。如果你要判断Date变量是否为初始值,可以用If d = New Date Then
2004-08-02 11:25:00 | [匿名用户:Ninputer]
re: Visual Basic 初学者系列——永远不要将=运算符用于Nothing 编辑
判断时期是否为空,就得使用 = Nothing ?

习惯使用 Empty,被告诉 Empty 被 Nothing 取代了。

于是就变成

If dDate = Nothing Then
...
2004-08-02 11:15:00 | [匿名用户:QuickBasic]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode MVC Blogger System