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

标签 c# asp.net .net

我有以下内容:

 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/

相关文章:

c# - 私有(private) TeamCity Nuget 不添加程序集引用

asp.net - 在 FileUpload 控件中获取文件的扩展名

.net - TPL 任务如何将中间结果发送到父线程?

c# - 获取通用类型的 Type 对象(不存在该对象的实例)

c# - 在 C# 作用域外声明变量

c# - 在控制焦点上的 WPF 中打开 AutoCompleteBox

c# - 在哪里可以找到 Windows 中的默认 Winforms 图标?

javascript - 如何将 Net 中的日期时间转换为 JavaScript

asp.net - 在不使用 Visual Studio 的情况下获取 MS SQL Server 连接字符串?

C# .NET (WinForm) - MainForm 分为菜单(左)和内容(右,子窗体)