将列表复制到新列表仍会更改旧列表的值

Dir*_*per 1 .net c# c#-3.0

我已经列入财产清单:

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没有更新?

Ren*_*ogt 6

你的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)