分类:
2008-03-28 08:47:58
(注:这里说的=指的是判断等值的运算符,而不是赋值语句)
我们都知道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类型的对象。初学者更要牢记这一点。