c# - 我不认为我正在修改这个集合

标签 c# list object collections

代码:

    List<Item> Contents = ObjectHandler.player.Contents.ToList<Item>() //Was HashTable
    List<int> IDS = new List<int>(); //Holds Item IDs for later counting
    foreach (Item I in Contents) 
    {
        IDS.Add(I.ID); // Add ID to IDS
    }
    List<Item> newContents = Contents;
    foreach (Item I in Contents)
    {
        if (IDS.Contains(I.ID)) //Check if the ID has already been used in Contents
        {
            newContents.Remove(I); //Remove it
        }
    }
    Contents = newContents;

此代码片段应准备一个 ID 列表供以后计数,并从项目列表中删除重复项。但是,一旦项目出现在 Contents 中,我就会收到 InvalidOperationException。我很确定我没有修改内容,foreach 正在循环,因此我很困惑。有人可以向我解释一下吗?谢谢。

最佳答案

newContents = Contents;

您现在有两个变量指向同一个集合。

您可能想通过编写 new List<Item>(Contents) 来复制集合.

关于c# - 我不认为我正在修改这个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071506/

相关文章:

Java 对象转换行为异常

c# - oData 中的集合名称列表

python - 如何在输入中搜索并打印项目,python?

c# - mscorlib.dll 中出现类型为 'System.FormatException' 的未处理异常

java - Java中的LinkedList参数

在 prolog 上列出练习

JavaScript HTML 对象 HTMLSelectElement

javascript - 为什么在使用传播语法复制对象后 getter/setter 不再工作?

c# - 带有是或否按钮的 JavaScript 警报

c# - 如何让 Gridview 呈现 THEAD?