C#每个修改列表。收藏已被修改;不能执行枚举操作

C#每个修改列表。收藏已被修改;不能执行枚举操作,c#,foreach,C#,Foreach,我需要帮助来理解这是苏。。。 在此代码中: listaVideoTemp = listaVideo; foreach (var itemVideo in listaVideo) { if (itemVideo.ID == id) { listaVideoTemp.RemoveAt(i); listaServidorTemp = listaServidor;

我需要帮助来理解这是苏。。。 在此代码中:

listaVideoTemp = listaVideo;
foreach (var itemVideo in listaVideo)
{
  if (itemVideo.ID == id)
  {
   listaVideoTemp.RemoveAt(i);                            

   listaServidorTemp = listaServidor;
                            
   foreach (var itemServidor in listaServidor)
   {
     listaVideoServidorTemp = itemServidor.PropListaVideo;

     foreach (var itemVideoServidor in itemServidor.PropListaVideo)
     {
       if (itemVideoServidor == id)
         listaVideoServidorTemp.RemoveAt(x);
       x++;
     }
    }
   }
   i++;
}
当执行ListAvideoServicdorTemp.RemoveAt时(x)也将删除
itemServidor.PropListaVideo
中的项目。 有人能帮我吗

Exception: Collection has been modified; the enumeration operation may not be performed.

谢谢。

错误告诉您,在对集合进行迭代时,无法修改该集合。在下一行中,
listaVideoTemp
是对
listaVideo
的引用,这是您正在迭代的项目:

listaVideoTemp.RemoveAt(i);
解决此问题的一种方法是创建列表的副本:

var listaVideoTemp = listaVideo.ToList();

ListAvideTemp=listaVideo
不复制,它将两个变量指向同一个引用。在对集合进行迭代时,不能修改该集合:
ListAvideTemp.RemoveAt(i)
Try
listaVideoTemp=listaVideo.ToList()注意您可能需要执行
listaVideo=listaVideoTemp在循环之后.C#generic
列表
是-换句话说,在分配之后,
listaVideoServidorTemp
是与
itemServidor.PropListaVideo
相同的对象,并且更改为一种效果,另一种效果。如果您想要一份副本,您需要执行
listaVideoServidorTemp=新建列表(itemServidor.propListaVideo)。这看起来像是一个-你是不是想用非常困难的方法来计算
x
i
中的一些东西?ListAvideTemp
的目的是什么?
listaServidorTemp
的目的是什么?工作正常。谢谢