Skip to main content
 首页 » 编程设计

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

2024年01月24日35lonelyxmas

我有以下内容:

 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) ); 

这将删除所有您想要删除的内容,而无需循环或临时副本。