在 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 ”?
抱歉:
答案 0 :(得分:0)
行不是lineCollection中项目的副本。它真的是对象的引用。您可以更改行,也可以更改集合中的项目。