ShoppingCart ;Collection 已修改;枚举操作可能不会执行

问题描述

我有一个购物车列表,我想循环查看,当该商品已在购物车中时,必须增加数量,否则必须创建一个新对象。

我知道您不能在循环中更改列表, 所以我尝试使用 Tolist() 但是当我尝试他只制作第一个对象并在我制作第二个对象时覆盖。

我没有解决这个问题,有人可以帮我解决吗?

[HttpPost,ActionName("Details")]
    [ValidateAntiForgeryToken]
    public IActionResult DetailsPost(int id,DetailsProductviewmodel detailsProductviewmodel)
    {
        List<ShoppingCart> shoppingCartsList = new List<ShoppingCart>();
        if (HttpContext.Session.Get<IEnumerable<ShoppingCart>>(WC.SessionCart)!=null 
            && HttpContext.Session.Get<IEnumerable<ShoppingCart>>(WC.SessionCart).Count() > 0)
        {
            shoppingCartsList = HttpContext.Session.Get<List<ShoppingCart>>(WC.SessionCart);
            foreach (var item in shoppingCartsList)
            {
                if (item.ProductId == id)
                {
                    item.Aantal += 1;
                }
                else
                {
                    shoppingCartsList.Add(new ShoppingCart { ProductId = id,Aantal = detailsProductviewmodel.Product.Aantal });
                }
            }
        }
        else
        {
            shoppingCartsList.Add(new ShoppingCart { ProductId = id,Aantal = detailsProductviewmodel.Product.Aantal });
        }
       
        HttpContext.Session.Set(WC.SessionCart,shoppingCartsList);
        return RedirectToAction(nameof(Index));
    }

解决方法

你不需要循环。只需尝试在列表中找到该项目。如果找到,增加数量,如果没有创建新的。

...//also check your shoppingCartsList is null or not
var product = shoppingCartsList.FirstOrDefault(x=>x.ProductId == id);
if(product == null)
{
 shoppingCartsList.Add(new ShoppingCart { ProductId = id,Aantal = detailsProductViewModel.Product.Aantal });
}
else
{
   product.Aantal++;
}

HttpContext.Session.Set(WC.SessionCart,shoppingCartsList);