2014-02-21 2 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 за пределами перечисления For Each.

Как это происходит? И как обойти это?

+0

, когда вы назначаете один список другому, это ByRef. вам может понадобиться скопировать элементы в новый список. – bansi

+0

звучит как _folderList, на самом деле не является копией содержимого folderLst ** **, а просто копией ссылки, поэтому при ее изменении вы меняете оба. – Plutonix

ответ

2

Чтобы скопировать список, вы не можете его назначить. Вы должны скопировать элементы. Попробуй это.

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

Спасибо @bansi, что работает – chiapa

+0

приятно слышать, что это сработало для вас – bansi

Смежные вопросы