比较一个Object,看它是不是一个Collection而不使用TypeName并将它比作一个String?

时间:2012-09-04 05:12:29

标签: arrays object collections vb6 compare

[以下是在VB6中,我有一个我想要测试的集合数组,以确保属于Type Collection]

我看过几年前写过的一些代码,我正在做以下事情,看看它是否是一个集合:

If TypeName(obj) = "Collection" Then ' Makes me feel uncomfortable.

但是,我不喜欢做字符串比较的想法(根据MSDN,降低性能以及让我觉得不舒服)并且更愿意做这样的事情:

If obj Is Collection Then

但是,此行在VB6中产生运行时错误,指出“编译器错误:变量未定义”。显然,因为“Is”运算符比较值而不是类型,所以这样做不会产生运行时错误,但无论如何都会返回False(即使我之前设置了obj = New Collection):

Dim obj As Collection
Set obj = New Collection
If obj Is New Collection Then ' Returns False under every condition.

这是因为“New Collection”将始终是一个新实例,因此在内存中是一个新位置(即使值相同)。

当然,我可以(并且确实)使用以下内容,但是我更喜欢一些不仅仅是测试Nothing的内容:

If Not obj Is Nothing Then ' We can just assume it is a Collection Type.

但是,我正在寻找一种更好的方法来测试某些东西是否属于集合类型,而不仅仅假设它必须是否为Nothing。

感谢您的预期协助。

1 个答案:

答案 0 :(得分:3)

使用TypeOf。例如:

If TypeOf obj Is Collection Then

TypeOf在`If ... Then ... Else'中描述。 topic in the VB6 documentation感谢Deanna指出这一点!