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

时间:2016-05-18 11:22:00

标签: c# .net c#-3.0

我已将一份清单列入财产:

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

1 个答案:

答案 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();