循环遍历列表并删除项目时,集合被修改错误

Mad*_* Zu 1 .net c# asp.net

我有以下内容:

 tempLabID = lstLab;
                    foreach (string labID in lstLab)
                    {
                        if (fr.GetFileRecipients(fsID).Contains(labID))
                        {
                            tempLabID.Remove(labID);
                        }
                    }   
Run Code Online (Sandbox Code Playgroud)

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

我无法理解为什么会这样.我正在修改一个不同的集合.

nvo*_*igt 5

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

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

lstLab.RemoveAll( labID => fr.GetFileRecipients(fsID).Contains(labID) );
Run Code Online (Sandbox Code Playgroud)

这将删除所有要删除的内容,而不需要循环或临时副本.