我正在尝试使用计数器从列表中删除某些内容,但它对我不起作用。
int i =0;
foreach(Rolls rl in rolls)
{
if(rl.getCourseId == courseId && rl.getStudentId == studentId)
{
rolls.RemoveAt(i) ;
}
i++;
}
任何人都可以理解为什么这可能不起作用。它给了我一个运行时例外:
“集合已被修改;枚举操作可能无法执行。”
答案 0 :(得分:7)
Jonas explained why this won't work,但我想我会提供另一种选择。
您可以使用List<T>.RemoveAll
删除一次通话中的所有匹配项目:
rolls.RemoveAll(rl => rl.getCourseId == courseId && rl.getStudentId == studentId);
答案 1 :(得分:5)
在您通过它进行预习时,无法修改集合。尝试使用常规for循环(或while循环):
int i = 0;
while(i < myCollection.Count)
{
if(removeItem)
myCollection.RemoveAt(i);
else
++i;
}
答案 2 :(得分:1)
使用foreach
进行迭代时,无法修改集合。
尝试使用for循环
for(int i = 0; i < rolls.Length; i++) {
答案 3 :(得分:0)
集合上的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
}
}
答案 4 :(得分:0)
你应该做一个环回
for(int i=rolls.Count-1;i>=0;i--)
if(rolls[i].getCourseId == courseId && rolls[i].getStudentId == studentId)
rolls.RemoveAt(i)