我已经列入财产清单:
public List<Pair> PairList {get;set;}
Run Code Online (Sandbox Code Playgroud)
并从一些函数设置它的值,然后我将此列表复制到另一个列表:
List<Pair> newPairList =new List<Pair>(PairList);
Run Code Online (Sandbox Code Playgroud)
我在一些函数中使用了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);
}
Run Code Online (Sandbox Code Playgroud)
实际问题:如果在newPairList中有任何更新,它将自动在PairList中更新.如何防止主要属性PairList没有更新?
你的Pair类型是class.所以在List<Pair>你的商店中存储对实例的引用Pair.
所以,如果你实例化一个 Pair
Pair pair = new Pair();
Run Code Online (Sandbox Code Playgroud)
pair有参考.如果您将该引用添加到aList<Pair>
PairList.Add(pair);
Run Code Online (Sandbox Code Playgroud)
然后将此列表复制到另一个列表中
newPairList = new List<Pair>(PairList);
Run Code Online (Sandbox Code Playgroud)
您将引用复制到新列表.如果更改新列表中引用的实例的属性,它仍然是相同的引用.所以你改变了原来的Pair实例.
你想要做的是复制Pair实例:
newPairList = PairList.Select(p => new Pair(p.key, p.intval) {
stringVal = p.stringVal,
ValType = p.ValType
}).ToList();
Run Code Online (Sandbox Code Playgroud)