我用Collection已经很长时间了,刚开始用的时间觉得他很好,但到最近反而用怕了,因为我遇到了下面这样的问题,不知道大家是不是也有这种问题,或是有什么建意.
==============CODE1===============================
dim tmpColl as new collection
dim tmpColl2 as new collection'在tmpColl中加入一些值
tmpColl.add "a","a"
tmpColl.add "b","b"
tmpColl.add "c","c"'将tmpColl"赋"给tmpColl2
set tmpColl2=tmpColl   '做一个副本'将tmpColl2中的对象b删除
tmpColl2.remove "b"'下面一句将出错,原意是取出tmpColl中的对象b
debug.print tmpColl("b")   '会提示找不到些对象,产生的原因是在上面一句SET中VB是通过传地址来将tmpColl"赋"给tmpColl2,也就是说对tmpColl2进行的任何操作都相当于在操作tmpColl,因此就达不到预期的效果,不知道大家有没有更好的办法来做一个Collection对象的副本,
==================================
============CODE2===================
'定义一个函数testCol
public function testCol() as collection
  '定义一个临时Collection对象
  dim re as new collection
  '向re中加入对象
  re.add "a","a"
  re.add "b","b"
  re.add "c","c"
  '返回调用
  set testCol=re
end function'在程序中调用testCol
 dim col as new collection
 '调用testCol函数
 set col=testCol()  '按要求在col对象中应包含"a","b","c"三个对象
 '下面的语句有可能出错
 debug.print col("a") 
 '我在实际的程序中遇到了很奇怪的问题,当我在相同的过程序调用类似上面的函数时有时在col对象中会存在三个值,但有时却一个都没有,我想可能是用传地址的问题吧,因为当testCol函数返回时其内部的re对象将被销毁,因此返回的Collection对象也将没意义
====================================
通过上面的两段CODE其实他们的问题原因是相同的,但是在对Collection对象做副本时只能通过SET的方法来做,可是当修改其中一个对象时另一个也会随着改变,有什么好的办法来解决这个问题吗???我原本想用重新创建一个COLLECTION对象来解决可是重建时只能考其的Value部分,而不能考Key部分,哎~~~~~~郁闷ing~~~~~~~~~~

解决方案 »

  1.   

    下面的那段程序你可以这样写
    public Sub testCol(re as collection)
      '向re中加入对象
      re.add "a","a"
      re.add "b","b"
      re.add "c","c"
    end function
      

  2.   

    public function MakeCopy(Original as collection) as collection
      

  3.   

    奇怪,调了一下你的code1,我怎么会没有出错
    因为当testCol函数返回时返回的应该是collection的地址参数现在我也遇到一个问题
    myCollection.item(i) 和 myCollection.item(j) 不能互换,就是改变在myCollection里面的排列次序我的msn [email protected]
    因为要用到collection对象,所以看了看。的确collection对象的功能实在是有时候不能解决问题