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)
TrylistaVideoTemp=listaVideo.ToList()代码>注意您可能需要执行listaVideo=listaVideoTemp代码>在循环之后.C#generic列表
是-换句话说,在分配之后,listaVideoServidorTemp
是与itemServidor.PropListaVideo
相同的对象,并且更改为一种效果,另一种效果。如果您想要一份副本,您需要执行listaVideoServidorTemp=新建列表(itemServidor.propListaVideo)代码>。这看起来像是一个-你是不是想用非常困难的方法来计算x
和i
中的一些东西?ListAvideTemp
的目的是什么?listaServidorTemp
的目的是什么?工作正常。谢谢