2014-02-21 144 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