从通用List <t>中删除项目

fro*_*sty 8 c# linq generics list

我有以下方法,我希望从我的集合中删除与产品ID匹配的项目.似乎相当直接,但我得到一个例外.基本上我的收藏是不同步的.那么从集合中删除项目的最佳方法是什么?

public void RemoveOrderItem(Model.Order currentOrder, int productId)
{

    foreach (var orderItem in currentOrder.OrderItems)
    {
        if (orderItem.Product.Id == productId)
        {
            currentOrder.OrderItems.Remove(orderItem);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

异常详细信息:System.InvalidOperationException:Collection已修改; 枚举操作可能无法执行

Kon*_*lph 28

修改循环内的集合不起作用.要解决这个问题,List有一些方法可以对集合进行"批量"修改.在您的情况下,使用:

currentOrder.OrderItems.RemoveAll(x => x.Product.Id == productId)
Run Code Online (Sandbox Code Playgroud)


Han*_*son 5

迭代时无法修改集合.只需使用普通for循环而不是foreach循环.