代码:
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/