【问题标题】:Collection modified exception thrown when the collection wasn't modified未修改集合时抛出集合修改异常
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2014-09-19
    • 2011-10-07
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多