我有以下内容:
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/