C#从对象列表中删除一个对象我有一个对象列表,我想通过首先检查一个属性来删除列表中的特定对象物体。最初我使用foreach但后来意识到在修改集合时不能使用它,所以我决定使用plainfor但后来我不知道如何编写可以完成我最初编写的代码。我如何编写代码来完成我最初所做的事情?谢谢这是我的代码:publicvoidDeleteChunk(intChunkID){//foreach(ChunkList中的Chunki)//{//if(i.UniqueID==ChunkID)//{//ChunkList.Remove(i);//}//}//这行不通,因为这里i只是一个整数,所以i.UniqueID不存在。for(inti=0;ix.UniqueId==ChunkID);if(item!=null)块列表。除去项目);您还可以执行以下操作,如果有多个匹配项,这也有效:ChunkList.RemoveAll(x=>x.UniqueId==ChunkID);你先删除然后递增,这意味着你将领先于我自己。相反,反向移除,这样你就不会搞砸你的下一个项目。for(inti=ChunkList.Count-1;i>=0;i--){if(ChunkList[i].UniqueID==ChunkID){ChunkList.RemoveAt(i);}如果ChunkList是一个列表,你可以使用RemoveAll方法:ChunkList.RemoveAll(chunk=>chunk.UniqueID==ChunkID);这段代码有两个问题:您正在检查i的UniqueID,而i实际上是一个整数。如果你想继续使用for循环,你应该做这样的事情。for(inti=0;i然而,你可以而且应该使用linq:ChunkList.Remove(x=>x.UniqueID==ChunkID);最初我使用foreach但后来意识到你不能在修改集合时使用它你可以创建集合的副本并使用ToList()迭代以创建要复制的副本:foreach(ChunkchunkinChunkList.ToList()){if(chunk.UniqueID==ChunkID){ChunkList.Remove(chunk);}一种技术是创建一个要修改的集合的副本,根据需要更改副本,然后在最后用副本替换初始集合。可以使用while循环删除与ChunkID匹配的项/项。这是我的建议:publicvoidDeleteChunk(intChunkID){inti=0;while(i首先,你使用的是Capacity而不是Count。其次,如果你只需要删除一个项目,那么你可以愉快地使用循环。您只需要确保在删除项目后跳出循环,如下所示:inttarget=4;for(inti=0;i如果你想从列表中删除所有与ID匹配的项目,它变得更容易,因为你可以使用List.RemoveAll(Predicatematch)inttarget=4;list.RemoveAll(element=>element.UniqueID==target);最简单的解决方案,不使用LINQ:ChunktoRemove=null;foreach(ChunkList中的Chunki){if(i.UniqueID==ChunkID){toRemove=i;break;}}if(toRemove!=null){ChunkList.Remove(toRemove);}(如果Chunk是一个结构体,那么可以使用Nullable来实现。)以上是C#学习教程:C#从对象列表中删除所有对象共享的内容集合。不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处: