【问题标题】:Change my new list without changing the original list更改我的新列表而不更改原始列表
【发布时间】:2018-07-17 19:47:58
【问题描述】:

这是我原来的清单:

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&lt;shoppingCartItem&gt;(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&lt;shoppingCartItem&gt; : cart 和 beforeUpdateCart 中。

谁能帮帮我?

【问题讨论】:

    标签: c#


    【解决方案1】:

    因此,您实际上是在更改列表中的项目,而不是将项目插入到列表中。当您的列表引用不同的对象时,它们包含对相同对象的引用。这就是为什么您在两者中都更新项目的原因。考虑使用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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多