在我的下面的代码中,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;
}
答案 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());
,因为它会创建新副本