保持原始列表不变

时间:2018-04-25 09:34:11

标签: c# generics collections

在我的下面的代码中,myOriginalList仍在修改中。 我如何保持不变?

感谢您的帮助。

List<Product> myOriginalList = GetList(); 
List<Product> customList= new List<Product>();

                        foreach (var productType in myProductTypeList )
                        {
                            var tempList = myOriginalList.ToList(); 
                            var result = GetModifiedCustomList(tempList, productType );
                            customList.AddRange(result);                                                                                    
                        }
.....
.....
 private List<Product> GetModifiedCustomList(List<Product> inplist, string productType)
        {
            List<Product> tmpList = new List<Product>(inplist); 

            if (tmpList?.Count > 0)
            {
                tmpList.ForEach(r => { if (r.ProductType == "NONE") { r.ProductType= productType; } }); 
            }
            return tmpList; 
        }  

2 个答案:

答案 0 :(得分:1)

您需要创建列表的深层副本。 一种可能的方法是克隆每个Product对象。

在Product类中添加一个静态Clone方法,该方法执行类似的功能。

 public static Product Clone(Product product)
        {
            return new Product
            {
                Underlying = product.Underlying
            };
        }

现在,遍历列表,克隆并将每个元素添加到新列表中。

var newList = new List<Product>();
oldList.ForEach(x => newList.Add(x.Clone()));

答案 1 :(得分:0)

尝试此var tempList = new List<Product>(myOriginalList.ToArray());,因为它会创建新副本