【发布时间】:2014-02-21 12:52:08
【问题描述】:
我在这段代码中遇到了一个我不理解的异常:
Dim folderList As List(Of String) = _folderList
For Each folder In folderList
destinationFolder = destinationFolder + "/" + folderName
localFilePath = lbl_folderPath.Text + "/" + folder
alterFolderList(localFilePath)
...
Next
我有一个全局变量_folderList,我将它复制到另一个变量folderList,如我的代码的第一行所示。当最后一个方法(alterFolderList)被调用时,它改变了变量_folderList。调试时,当我第一次到达for each 的末尾时(在Next),我得到了集合被修改的异常,而实际上并不是因为调用的方法没有改变它。调试时,在调用该方法后,我将鼠标悬停在变量 folderList 上方,我看到它发生了变化,现在与 _folderList 相同,但它不应该因为变量 folderList 等于 _folderList 在外部For Each枚举。
这是怎么发生的?以及如何解决这个问题?
【问题讨论】:
-
当您将一个列表分配给另一个列表时,它是 ByRef。您可能需要将元素复制到新列表中
-
听起来 _folderList 实际上不是 folderLst contents 的副本,而只是引用的副本,因此当您更改一个时,您同时更改了两个。
标签: vb.net enumeration