0

亚当弗里曼的Pro ASP.NET MVC 4 * 4th * Edition和“构建购物车”第 219 页中,他定义了一个购物车实体

 public class Cart
{
    private List<CartLine> lineCollection = new List<CartLine>();

    public void AddItem(Product product, int quantity)
    {
        CartLine line = lineCollection
            .Where(p => p.Product.ProductId == product.ProductId)
            .FirstOrDefault();

        if (line == null)
        {
            lineCollection.Add(new CartLine { Product = product, Quantity = quantity });
        }
        else
        {
            line.Quantity += quantity;
        }
    }
      //Other codes

    public class CartLine {
        public Product Product { get; set; }
        public int Quantity { get; set; }
    }
}

此模型从AddToCart操作方法调用:

public RedirectToRouteResult AddToCart(Cart cart, int productId, string returnUrl)
        {
            Product product = ctx.Products.FirstOrDefault(p => p.ProductId == productId);

            if (product != null)
            {
                cart.AddItem(product, 1);
            }

            return RedirectToAction("Index", new { returnUrl });
        }

当我们第一次将产品添加到购物车时,它会添加到“lineCollection”列表中。但是如果我们再次添加这个产品,“ line.Quantity ”会增加,“ lineCollection也会得到更新( “ lineCollection ”列表中这个产品的“ Quantity ”属性也会增加)。我的问题是这个更新(增加“ lineCollection ”的产品数量)是如何发生的?我们没有直接改变“ lineCollection ”?

为。。。道歉:

  • 我的英语不好
  • 我的乱七八糟的问题
4

1 回答 1

0

line 不是 lineCollection 中项目的副本。它实际上是对对象的引用。你改变了行,你也改变了集合中的项目。

于 2013-06-11T23:17:59.487 回答