搬家(From Qzone) VB Collection对象的Add...>_<...
2006-05-09 19:13
357 查看
发表时间:2006年1月19日 4时44分
今晚很郁闷,竟然为了被ByRef耍了一晚上…
,终于在偶的n遍调试下终于发现是什么问题导致的.ho~~
爽!~做程序就是这样.我喜欢解决问题后的成就感..
这里呢我说一下Coolection的强大功能.可以add引用的东东.今晚就是被它耍了几个小时…nnd!!
事情是这样的..
我需要把程序返回的一个对象添加到集合对象里面去,在添加的时候呢我是这样写的:
Private Sub FillData(Subjects As Collection)
Dim temp As new clsItemQuestion
While Not myDBManager.rst.EOF
temp.Grade = CStr(myDBManager.rst!Grade)
temp.ID = CStr(myDBManager.rst!sub_id)
temp.Name = CStr(myDBManager.rst!sub_name)
Subjects.Add temp
myDBManager.rst.MoveNext
Wend
Set temp = Nothing
End Sub
一开始呢,我直接实例化一个类,然后为这个对象属性赋值,最后把这个对象添加到集合里面去.这里隐藏了一个很隐蔽的错误,就是集合对象存放的不是一个新的类,也就是说,它存放的就是开始实例化"Dim temp as new clsItemQuestion"这个对象,因为我只实例化了一个.所以在存放到里面之后呢,我发现无论我增加多少个,取出的数据个数虽然不会少,但里面的每一个数据都是最后一个添加进去的数据.也就是说当我第一次放进Grade=1,ID=2,Name=abc,下次再放进去的话,前一次放进的数据会跟着当前数据变化而变化,这是因为Collection集合对象是按引用存放的,集合里面虽然存放的对象越来越多,但终归为一个对象的引用.所以导致了所有数据(其实就是全部都是本身)都一样.要想添加对象进去,必须每次都实例化一个对象.这样的每个对象才是真正独立的对象.也就避免了上述的问题!解决代码如下:
Private Sub FillData(Subjects As Collection)
Dim temp As clsItemQuestion
While Not myDBManager.rst.EOF
Set temp = New clsItemQuestion
temp.Grade = CStr(myDBManager.rst!Grade)
temp.ID = CStr(myDBManager.rst!sub_id)
temp.Name = CStr(myDBManager.rst!sub_name)
Subjects.Add temp
myDBManager.rst.MoveNext
Wend
Set temp = Nothing
End Sub
今晚很郁闷,竟然为了被ByRef耍了一晚上…
,终于在偶的n遍调试下终于发现是什么问题导致的.ho~~
爽!~做程序就是这样.我喜欢解决问题后的成就感..
这里呢我说一下Coolection的强大功能.可以add引用的东东.今晚就是被它耍了几个小时…nnd!!
事情是这样的..
我需要把程序返回的一个对象添加到集合对象里面去,在添加的时候呢我是这样写的:
Private Sub FillData(Subjects As Collection)
Dim temp As new clsItemQuestion
While Not myDBManager.rst.EOF
temp.Grade = CStr(myDBManager.rst!Grade)
temp.ID = CStr(myDBManager.rst!sub_id)
temp.Name = CStr(myDBManager.rst!sub_name)
Subjects.Add temp
myDBManager.rst.MoveNext
Wend
Set temp = Nothing
End Sub
一开始呢,我直接实例化一个类,然后为这个对象属性赋值,最后把这个对象添加到集合里面去.这里隐藏了一个很隐蔽的错误,就是集合对象存放的不是一个新的类,也就是说,它存放的就是开始实例化"Dim temp as new clsItemQuestion"这个对象,因为我只实例化了一个.所以在存放到里面之后呢,我发现无论我增加多少个,取出的数据个数虽然不会少,但里面的每一个数据都是最后一个添加进去的数据.也就是说当我第一次放进Grade=1,ID=2,Name=abc,下次再放进去的话,前一次放进的数据会跟着当前数据变化而变化,这是因为Collection集合对象是按引用存放的,集合里面虽然存放的对象越来越多,但终归为一个对象的引用.所以导致了所有数据(其实就是全部都是本身)都一样.要想添加对象进去,必须每次都实例化一个对象.这样的每个对象才是真正独立的对象.也就避免了上述的问题!解决代码如下:
Private Sub FillData(Subjects As Collection)
Dim temp As clsItemQuestion
While Not myDBManager.rst.EOF
Set temp = New clsItemQuestion
temp.Grade = CStr(myDBManager.rst!Grade)
temp.ID = CStr(myDBManager.rst!sub_id)
temp.Name = CStr(myDBManager.rst!sub_name)
Subjects.Add temp
myDBManager.rst.MoveNext
Wend
Set temp = Nothing
End Sub
相关文章推荐
- 控制台app.config 的 <add key="aspnet:MaxHttpCollectionKeys" value="10000" />无效
- 降低对象的引用级别到软引用 class SoftValueMap<K, V> extends HashMap<K, V>
- 黑马程序员 java基础<二>--其它对象Date、Calendar和Math-Random(2)
- List<Object>装的是对象 排序问题
- List<?> list= new ArrayList<?>为什么这样写 接口引用指向实现类的对象
- hadoop学习笔记之<Call From localhost/127.0.0.1 to localhost:9000 failed...>
- 关于List<E>.addAll(Collection<? extends E> collection)传入参数null
- 程序员_Java基础<二>-面向对象中
- ejb 学习:遇到错误:LazyInitializationException.<init> : failed to lazily initialize a collection of role:
- <Head First Java>学习笔记--第四章:方法操作实例变量 对象的行为
- <LeetCode OJ> 241. Different Ways to Add Parentheses
- C++ 零散知识点速记 -- <深入探索C++对象模型> 读书笔记
- <html:optionsCollection />标签与LabelValueBean使用方法
- 使用< OBJECT >标记引用对象
- MyBatis中对List<Object> 对象List的批处理插入操作
- 搬家(From Qzone) VB中如何执行sql批处理文件
- java.lang.VerifyError: Bad <init> method call from inside of a branch
- S动态添加与删除select中的Option对象 2009年09月23日 15:26 <html> <head> <meta http-equiv="Content-Type" content="t
- wpf中ist<T>与ObservableCollection<T>的用法区别
- Linq List<T>.Distinct() 去除对象重复