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

Copying list to new list still change the old list's value

我已经将列表放入属性:

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 中更新。如何防止 main 属性 PairList 没有更新?

您的 Pair 类型是 class。因此,在您的 List<Pair> 中,您将 引用 存储到 Pair.

的实例

所以如果你实例化一个 Pair

Pair pair = new Pair();

pair 有参考。如果您将该引用添加到 List<Pair>

PairList.Add(pair);

然后将此列表复制到另一个列表中

newPairList = new List<Pair>(PairList);

您将 references 复制到新列表。如果您更改新列表中 referenced 实例的属性,它仍然是相同的引用。所以你改变了原来的Pair实例。


您想要做的是 复制 Pair 个实例

newPairList = PairList.Select(p => new Pair(p.key, p.intval) {
                         stringVal = p.stringVal,
                         ValType = p.ValType
               }).ToList();