我有两个清单:
List<image> ImagesByPerimeterId
List<PerimeterTile> ImagesWithMorePerimeters
上下文如下:我想从ImagesByPerimeterId
列表中删除包含在ImagesWithMorePerimeters
列表中找到的ID的图像。ImagesWithMorePerimeters
列表有一个imageId
属性,可以与第一个属性进行比较。
我已经实现了这个逻辑,它运行得非常好:
foreach(var i in ImagesByPerimeterId)
{
foreach(var j in ImagesWithMorePerimeters)
{
if (i.Id == j.ImageId)
{
ImagesByPerimeterId.Remove(i);
}
}
}
但我在寻找一种比较这些列表的更简单的方法,有什么建议吗?
我尝试使用list.Except()
,但由于列表是不同的对象,因此无法使用
2条答案
按热度按时间lymnna711#
您试图在遍历列表时修改列表,这将在调用方法
Remove()
时导致异常:无效操作异常错误:集合已修改;枚举操作可能无法执行。
如果你想使用迭代来完成它,那么就做这个:
如果你想让它更短,你可以使用Linq:
Linq版本的速度会慢5倍左右,下面是基准测试:
fzwojiic2#
您可以执行此操作,
result
将是ImageId
的列表