2014-02-21 99 views
0

我发现了一个例外,我不要在此位的代码在这里了解抛出:收集修改例外集合时没有被修改

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

这是怎么发生的?以及如何解决这个问题?

+0

当您将一个列表分配给另一个列表时,它是ByRef。您可能需要将元素复制到新列表中 – bansi

+0

听起来像_folderList实际上不是文件夹最内容**的副本,而只是参考的副本,因此当您更改一个时,您将同时更改这两个参数。 – Plutonix

回答

2

要复制列表,您不能分配它。你应该复制这些元素。尝试这个。

Dim folderList As New List(Of String) 
folderList.AddRange(_folderList) 
+0

谢谢@ bansi,该作品 – chiapa

+0

很高兴听到它为你工作 – bansi