从列表中删除某些内容

1ft*_*tw1 2 c#

我试图使用计数器从列表中删除某些东西,但它不适合我.

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

谁能明白为什么这可能不起作用.它给了我一个运行时异常:

"集合已被修改;枚举操作可能无法执行."

Ree*_*sey 7

乔纳斯解释了为什么这不起作用,但我想我会提供另一种选择.

您可以使用List<T>.RemoveAll删除一个呼叫中的所有匹配项:

rolls.RemoveAll(rl => rl.getCourseId == courseId && rl.getStudentId == studentId);
Run Code Online (Sandbox Code Playgroud)


Jon*_*nas 5

在您通过它时,您无法修改集合.尝试使用常规for循环(或while循环):

int i = 0;
while(i < myCollection.Count)
{
  if(removeItem)
    myCollection.RemoveAt(i);
  else
    ++i;
}
Run Code Online (Sandbox Code Playgroud)

  • 不,这就是为什么你只增加我,如果你不删除的东西. (3认同)