Adam Freeman在Pro ASP.NET MVC 4中的购物车

时间:2013-06-11 22:51:42

标签: asp.net-mvc shopping-cart

Pro ASP.NET MVC 4 * 4th * Edition by Adam Freeman 和“构建购物车< / em>“第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 ”列表中此产品的“数量”属性也会增加 )。我的问题是这个更新(增加“ lineCollection ”的产品数量)是如何发生的?我们没有直接更改“ lineCollection ”?

抱歉:

  • 我的英语不好
  • 我凌乱的问题

1 个答案:

答案 0 :(得分:0)

行不是lineCollection中项目的副本。它真的是对象的引用。您可以更改行,也可以更改集合中的项目。