将列表复制到新列表仍然会更改旧列表的值
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();
我已经将列表放入属性:
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();