VB里两个集合能否直接进行比较,我试过IS运算符,那个没毛用!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/24 08:15:07
示例如下:
Dim X As New Collection, Y As New Collection
X.Add "1"
Y.Add "1"
If X Is Y Then MsgBox 123
程序运行结果没有出现确认对话框.这看起来本来X和Y都是一样的。但比较就是不行.请教下各位这到底是怎么回事?集合能否直接比较?(不要用循环).
气人的是,看到VB帮助里说IS运算符怎么用的吗?
set x=y
x is y 的运算结果就是TRUE.
我都已经把X和Y都设到相等了,我还用得着用IS来比较个毛啊!!!!!!

Collection不能直接比较,因为Collection是对象,而不是变量,就像form1能和form2比较吗?意思一样。必须用循环逐个元素比较。
如果 X 和 Y 引用相同的对象,则 X Is Y 为 True,否则为false。你可理解为X和Y是否指向同一块内存。
你的程序中X和Y是两个对象,是两块分别的内存,当然 X Is Y 为 false
set x=y 的意思是“X指向Y”,而不是把Y的内容原封不动地复制到X里,就是一块内存X也引用它Y也引用它,所以X Is Y为True了。
set x=y不是“把X和Y都设到相等了”的意思,在VB里这种对象的赋值语句是“引用”,而不是把Y的内容复制一份存到X(类似于C语言中的指针操作:int *p=a;并不开辟新的内存空间),也就是说,如果set x=y,则可以Dim X As Collection而不用New,即时New了,set x=y时也会自动消掉X的内存空间,而把X当做一个指针直接指向Y)

二楼正解!第一次遇这样的问题啊,努力学习中…

IS?