我已将一份清单列入财产:
public List<Pair> PairList {get;set;}
并从某些函数设置其值,然后我将此列表复制到另一个列表:
List<Pair> newPairList =new List<Pair>(PairList);
我在某个函数中使用了newPairList,它在newPairList中设置了一些值
somefunc(newPairList)
{
newPairList.stringVal ="xxxxx";
}
public class Pair
{
public int intVal;
public string key;
public string stringVal;
public string ValType;
public Pair(string key, int val);
public Pair(string key, string val);
}
实际问题: 如果在newPairList中有任何更新,它将自动在PairList中更新。如何防止主要属性 PairList 没有更新?
答案 0 :(得分:6)
您的Pair
类型为class
。因此,在List<Pair>
中,您将引用存储到Pair
的实例中。
因此,如果您实例化Pair
Pair pair = new Pair();
pair
有一个参考。如果您将该引用添加到List<Pair>
PairList.Add(pair);
然后将此列表复制到另一个
newPairList = new List<Pair>(PairList);
将引用复制到新列表。如果您更改新列表中引用的实例的属性,它仍然是相同的引用。因此,您更改了原始的Pair
实例。
您要做的是复制Pair
实例:
newPairList = PairList.Select(p => new Pair(p.key, p.intval) {
stringVal = p.stringVal,
ValType = p.ValType
}).ToList();