以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]集合的长度为什么会变化 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=145304) |
||||
-- 作者:chnfo -- 发布时间:2020/1/15 16:48:00 -- [求助]集合的长度为什么会变化 定义了一个集合变量A,然后把这个变量赋给B 在运行过程中,当B的集合元素变化时,集合A的元素也变了,这是为什么?
|
||||
-- 作者:有点蓝 -- 发布时间:2020/1/15 16:58:00 -- 正常。集合属于引用对象,变量引用的是对象的内存地址,集合变量A赋给B,A和B引用的都是同一个对象的内存地址 |
||||
-- 作者:chnfo -- 发布时间:2020/1/15 17:20:00 -- 问题是我要用源集合变量A去做一些判断,如果它要随副本B动态变化,那岂不是就搞不成了? 可以运行自定义函数(项目中只有一个自定义函数),里面我写了注释。 总不能在每一次遍历的时候,再把源集合变量A计算一次吧 例如源集合变量X=datatables("A").getvalues("ID","Temp = 1") 然后遍历时 dim y as new list(of string) for each dr as datarow in datatables("B").datarows
y = x
if *** then
y.remove(dr("BID")) \'----结果是y移除了某一个无素,X也同时移除了,这个有点问题吧,我的理解,y只是一个副本,它移除了某个元素Z,但X应当还有这个元素Z啊
end if next
[此贴子已经被作者于2020/1/15 17:26:31编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2020/1/15 17:33:00 -- 什么是对象引用,什么是值引用?百度学习一下。 那就不要直接赋值,新建一个集合,和A集合的项目给B集合 Dim y As new List(of String) y.Add("1") y.Add("2") Dim x As new List(of String) x.AddRange(y) x.Remove("1") For Each s As String In y Output.Show(s) Next Output.Show("*********") For Each s As String In x Output.Show(s) Next |
||||
-- 作者:chnfo -- 发布时间:2020/1/15 17:47:00 -- 原来如彼,刚刚还看了这节帮助,还以为赋值即可 |