C# 更改我的新列表而不更改原始列表

C# 更改我的新列表而不更改原始列表,c#,C#,这是我的原始列表: var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id)

这是我的原始列表:

var cart = _workContext.CurrentCustomer.ShoppingCartItems
                        .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart)
                        .LimitPerStore(_storeContext.CurrentStore.Id)
                        .ToList();
我查看了此链接:

我知道我有一个复制的方法,所以这是我的方法:

private List<ShoppingCartItem> CopyShoppingCartItems(List<ShoppingCartItem> target)
{
    //var tmp = new List<ShoppingCartItem>(target);
    var tmp = target.ToList();
    return tmp;
}
但是
newQuantity
同时插入
列表
:购物车和
更新前购物车


有人能帮我吗?

那么您实际上是在更改列表中的项目,而不是将项目插入列表中。当列表引用不同对象时,它们包含对相同对象的引用。这就是为什么在这两种情况下都会更新项目。考虑使用解决问题的方法。可以通过创建复制构造函数来完成:

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;
}
私有列表CopyShoppingCartItems(列表目标)
{
var tmp=target.ConvertAll(i=>newshoppingcartitem(i));
返回tmp;
}

因此您实际上是在更改列表中的项目,而不是将项目插入列表中。当列表引用不同对象时,它们包含对相同对象的引用。这就是为什么在这两种情况下都会更新项目。考虑使用解决问题的方法。可以通过创建复制构造函数来完成:

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;
}
私有列表CopyShoppingCartItems(列表目标)
{
var tmp=target.ConvertAll(i=>newshoppingcartitem(i));
返回tmp;
}