从列表中删除某些东西
我试图使用计数器从列表中删除某些内容,但它不适用于我。从列表中删除某些东西
int i =0;
foreach(Rolls rl in rolls)
{
if(rl.getCourseId == courseId && rl.getStudentId == studentId)
{
rolls.RemoveAt(i) ;
}
i++;
}
任何人都可以看到为什么这可能无法正常工作。它给我一个运行时异常:
“收集已修改;枚举操作可能无法执行。”
在对其进行透视时,您无法修改集合。尝试使用常规的for循环,而不是(或while循环):
int i = 0;
while(i < myCollection.Count)
{
if(removeItem)
myCollection.RemoveAt(i);
else
++i;
}
这也不行,因为你删除项目,指标的变化,你会移除错误项目。 – 2012-08-13 23:52:54
不,这就是为什么你只增加我,如果你不删除的东西。 – Jonas 2012-08-13 23:53:44
现在你把例子放在......是的,这会起作用,但很尴尬。 – 2012-08-13 23:56:10
,你通过它迭代与foreach
您不能修改的集合。
尝试使用一个for循环,像这样 for(int i = 0; i < rolls.Length; i++) {
Jonas explained why this won't work,但我想我会提供另一种选择。
您可以使用List<T>.RemoveAll
去除一个呼叫所有符合条件的物品:
rolls.RemoveAll(rl => rl.getCourseId == courseId && rl.getStudentId == studentId);
foreach所收集不喜欢你的工作。试试这个:
for (int x = 0; x < rolls.Count; x++)
{
if(rolls[x].getCourseId == courseId && rolls[x].getStudentId == studentId)
{
rolls.RemoveAt(x);
--x; //since we removed an item, the index needs to be updated accordingly
}
}
你应该做一个loopback
for(int i=rolls.Count-1;i>=0;i--)
if(rolls[i].getCourseId == courseId && rolls[i].getStudentId == studentId)
rolls.RemoveAt(i)
迭代通过循环向后 – user959631 2012-08-13 23:50:21