我有以下内容:

 tempLabID = lstLab;
                    foreach (string labID in lstLab)
                    {
                        if (fr.GetFileRecipients(fsID).Contains(labID))
                        {
                            tempLabID.Remove(labID);
                        }
                    }


当我调试并观察lstLab并进入tempLabID.remove()时,它将lstLab从1更改为0,然后依次返回到foreach时,我收到一条错误消息,说集合已被修改。

我不明白为什么会这样。我正在修改其他收藏集。

最佳答案

不,您正在修改同一集合。您有两个指向同一集合的变量。您的第一行需要克隆集合才能起作用。

您可以修改代码,以免出现问题:

lstLab.RemoveAll( labID => fr.GetFileRecipients(fsID).Contains(labID) );


这将删除所有要删除的文件,而无需循环或临时副本。

关于c# - 遍历列表和删除项目时,集合被修改错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18724237/

10-09 20:04