1

任何人都可以帮助我,伙计们?这个 foreach 总是错误索引超出范围。必须是非负数且小于集合的大小。(参数'index')即使我给了索引0,解决办法是什么

var store = _cartCollection.Find(x => x.id_cart == entity.id_cart).ToList();
                    int index = -1;
           
                    foreach (var cart in store)
                    {
                        var b = index++; // it shows 
                        entity.cart[0].nama_produk = cart.nama_produk;

                        entity.cart[0].jumlah = cart.jumlah;
                        entity.cart[0].harga = cart.harga;
                        entity.cart[0].subtotal = cart.subtotal;
                        entity.cart[0].notes = cart.notes;
                    }

这是类对象

在此处输入图像描述

我想我错误地声明了实体购物车数组/列表,你知道正确的方法吗?请不要吝啬我是新手

4

1 回答 1

2

我不确定您的确切问题是什么,但我看到一些可能导致问题的“代码异味”:

  1. 在此代码块中:

     var store = _cartCollection.Find(x => x.id_cart == entity.id_cart).ToList();
     int index = -1;
     foreach (var cart in store)
    

您似乎正在根据其 ID检索单个购物车,然后对其进行处理。如果我有这个权利,你可以用这样的东西更简单地完成这个:

    var cart = _cartCollection.Find(x => x.id_cart == entity.id_cart).FirstOrDefault();

那么你根本不需要 for 循环......只需使用你找到的一个购物车。在那一点上,您还应该检查购物车是否为空...以防它不存在...但这取决于您的特定用例。

  1. 循环中的每一步都会增加索引......但它的值从未使用过。除非您有理由使用它,否则我建议您完全删除它......除非您打算检索多个购物车并将它们全部添加到 entity.cart 集合中。

  2. 在这个代码块中(这实际上是引发错误的原因:

                     entity.cart[0].nama_produk = cart.nama_produk;
    
                     entity.cart[0].jumlah = cart.jumlah;
                     entity.cart[0].harga = cart.harga;
                     entity.cart[0].subtotal = cart.subtotal;
                     entity.cart[0].notes = cart.notes;
    

代码不清楚。我对您尝试做的最好的猜测是将您找到的购物车的详细信息添加到实体对象上的购物车信息集合中。我还假设 entity.cart 是一个 List 或类似的东西。

如果我的假设是正确的,那么你得到这个异常的原因是 cart[0] 不存在,直到你将一个 cart 对象添加到该列表中(这可能是你在这里尝试做的。一种更易读(且不易出错)的方法是:

       var entityCart = new Cart {
                                     nama_produk = cart.nama_produk,
                                     jumlah = cart.jumlah,
                                     harga = cart.harga,
                                     subtotal = cart.subtotal,
                                     notes = cart.notes
                                 };
       entity.cart.Add(entityCart);

可能是您正在尝试将产品添加到购物车……在这种情况下,您应该稍微更改变量名称,但其余部分非常相似。

于 2021-01-05T12:44:46.597 回答