2

我正在尝试使用计数器从列表中删除某些内容,但它对我不起作用。

    int i =0;
    foreach(Rolls rl in rolls)
    {   
        if(rl.getCourseId == courseId && rl.getStudentId == studentId)
        {
            rolls.RemoveAt(i) ;   
        }
        i++;
    }

谁能明白为什么这可能行不通。它给了我一个运行时异常:

“集合已修改;枚举操作可能无法执行。”

4

5 回答 5

7

Jonas 解释了为什么这不起作用,但我想我会提供另一种选择。

您可以使用List<T>.RemoveAll一次调用删除所有匹配项:

rolls.RemoveAll(rl => rl.getCourseId == courseId && rl.getStudentId == studentId);
于 2012-08-13T23:49:38.427 回答
5

在 foreach-ing 时不能修改集合。尝试使用常规 for 循环(或 while 循环):

int i = 0;
while(i < myCollection.Count)
{
  if(removeItem)
    myCollection.RemoveAt(i);
  else
    ++i;
}
于 2012-08-13T23:47:14.777 回答
1

您无法在使用 迭代集合时修改集合foreach

尝试像这样使用 for 循环 for(int i = 0; i < rolls.Length; i++) {

于 2012-08-13T23:47:24.060 回答
0

你应该做一个环回

for(int i=rolls.Count-1;i>=0;i--)
    if(rolls[i].getCourseId == courseId && rolls[i].getStudentId == studentId)
        rolls.RemoveAt(i)
于 2012-08-14T00:56:17.000 回答
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
    }
}
于 2012-08-13T23:49:55.603 回答