当我尝试在列表中运行枚举器然后执行某些操作时,我正在开发一个小函数。 (下面是我想要做的事情。
当我试图删除时,我得到了一个“收藏无法修改”,在我实际醒来之后,我意识到tempList必须刚刚被分配了myLists引用而不是myLists的副本。之后,我试图找到一种说法
tempList = myList.copy
然而似乎没有什么?我最后编写了一个小的for循环,然后将myLsit中的每个项目添加到tempList中,但我原以为会有另一种机制(如clone?)
所以我的问题:
如何将列表复制到另一个列表?
private myList as List (Of something)
sub new()
myList.add(new Something)
end sub
sub myCalledFunction()
dim tempList as new List (Of Something)
tempList = myList
Using i as IEnumerator = myList.getEnumarator
while i.moveNext
'if some critria is met then
tempList.remove(i.current)
end
end using
end sub
答案 0 :(得分:8)
通过编写tempList = myList
你没有复制集合,你只能使tempList引用myList。请改为尝试:dim tempList as new List (Of Something)(myList)
答案 1 :(得分:0)
尝试此操作 - 使用LINQ从原始列表创建新列表,例如:
Sub Main()
Dim nums As New List(Of Integer)
nums.Add(1)
nums.Add(2)
nums.Add(3)
nums.Add(4)
Dim k = (From i In nums _
Select i).ToList()
For Each number As Integer In nums
k.Remove(number)
Next
End Sub
k
将是一个新的数字列表,它没有链接到源。
答案 2 :(得分:0)
我认为如果你调用myCalledFunction(byVal aListCopy as Something),你可以让框架完成工作。
答案 3 :(得分:0)