一:问题描述
在如下代码中:
foreach (var barcodeContent in block.Barcodes)
{
if (barcodeContent.Name==barcode.Name)
{
block.Barcodes.Remove(barcodeContent);
}
}
foreach (var item in barcodeList)
{
if (item.Name == barcode.Name)
{
barcodeList.Remove(item);
}
}
当循环第二次foreach时候 ,由于前一次if 条件满足,改变了集合block.Barcodes中元素的结构,因此对同一集合再次执行foreach
时就会报错:集合已修改,可能无法执行枚举操作
二 :解决方法
方法 1:
可以使用for循环来对集合进行循环(测试略)
方法 2:
修改代码如下
foreach (var barcodeContent in block.Barcodes.ToArray())
{
if (barcodeContent.Name==barcode.Name)
{
block.Barcodes.Remove(barcodeContent);
}
}
foreach (var item in barcodeList.ToArray())
{
if (item.Name == barcode.Name)
{
barcodeList.Remove(item);
}
}
使用ToArray 对集合进行转换 即可。