这是我的原始列表:
var cart = _workContext.CurrentCustomer.ShoppingCartItems
.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart)
.LimitPerStore(_storeContext.CurrentStore.Id)
.ToList();
我查看了此链接:How do I change my new list without changing the original list?
并且已经了解到我有一个复制方法,所以这是我的方法:
private List<ShoppingCartItem> CopyShoppingCartItems(List<ShoppingCartItem> target)
{
//var tmp = new List<ShoppingCartItem>(target);
var tmp = target.ToList();
return tmp;
}
我也测试了var var tmp = new List<shoppingCartItem>(target)
。
这是我的目标:
var beforeUpdatCart = CopyShoppingCartItems(cart);
foreach (var sci in cart)
{
var remove = allIdsToRemove.Contains(sci.Id);
if (remove)
_shoppingCartService.DeleteShoppingCartItem(sci, ensureOnlyActiveCheckoutAttributes: true);
else
{
foreach (var formKey in form.Keys)
if (formKey.Equals($"itemquantity{sci.Id}", StringComparison.InvariantCultureIgnoreCase))
{
int newQuantity;
if (int.TryParse(form[formKey], out newQuantity))
{
sci.Quantity = newQuantity;
}
break;
}
}
}
但是newQuantity
插入了List<shoppingCartItem>
的购物车和beforeUpdateCart
中。
有人可以帮助我吗?
答案 0 :(得分:3)
因此,您实际上是在更改列表中的项目,而不是将项目插入列表中。当列表引用不同的对象时,它们包含对相同对象的引用。这就是为什么您要同时更新两者的原因。考虑使用deep copy来解决您的问题。这可以通过创建复制构造函数来完成:
public ShoppingCartItem(ShoppingCartItem item)
{
// copy all your fields there
}
然后:
private List<ShoppingCartItem> CopyShoppingCartItems(List<ShoppingCartItem> target)
{
var tmp = target.ConvertAll(i => new ShoppingCartItem(i));
return tmp;
}