Skip to main content
 首页 » 编程设计

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

2024年01月25日24lovecherry

代码:

    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) 来复制集合.