Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表复制到新列表仍会更改旧列表';s值_C#_.net_C# 3.0 - Fatal编程技术网

C# 将列表复制到新列表仍会更改旧列表';s值

C# 将列表复制到新列表仍会更改旧列表';s值,c#,.net,c#-3.0,C#,.net,C# 3.0,我已将一份清单纳入财产: public List<Pair> PairList {get;set;} 实际问题: 如果任何东西在newPairList中得到更新,它将自动在PairList中得到更新。如何防止主属性PairList无法更新?您的对类型是类。因此,在列表中存储对对的实例的引用 因此,如果您实例化一个对 Pair pair = new Pair(); 对有一个引用。如果将该引用添加到列表中 然后将此列表复制到另一个列表中 newPairList = new List&

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

public List<Pair> PairList {get;set;}
实际问题:
如果任何东西在newPairList中得到更新,它将自动在PairList中得到更新。如何防止主属性PairList无法更新?

您的
对类型是
类。因此,在
列表中
存储
对的实例的引用

因此,如果您实例化一个

Pair pair = new Pair();
有一个引用。如果将该引用添加到
列表中

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

newPairList = new List<Pair>(PairList);

您的
类型是
。因此,在
列表中
存储
对的实例的引用

因此,如果您实例化一个

Pair pair = new Pair();
有一个引用。如果将该引用添加到
列表中

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

newPairList = new List<Pair>(PairList);


创建新的Pair对象,例如通过提供返回它的
DeepCopy
函数。然后您可以使用以下命令获取列表:
list newPairList=PairList.Select(p=>p.DeepCopy()).ToList()因为Pair是引用类型,所以新列表将包含对旧列表中引用所引用的相同对象的引用。如果第一个列表中的Pair类是新实例,那么您唯一能做的就是将这些实例克隆到新实例中,并用这些新实例填充第二个列表。@ZoharPeled您能提供一些代码吗。这将有助于lot@DirtyDeveloper看看你已经得到的答案。。。我开始写答案,但勒内·沃格特比我快。创建新的Pair对象,例如,通过提供一个返回它的
DeepCopy
函数。然后您可以使用以下命令获取列表:
list newPairList=PairList.Select(p=>p.DeepCopy()).ToList()因为Pair是引用类型,所以新列表将包含对旧列表中引用所引用的相同对象的引用。如果第一个列表中的Pair类是新实例,那么您唯一能做的就是将这些实例克隆到新实例中,并用这些新实例填充第二个列表。@ZoharPeled您能提供一些代码吗。这将有助于lot@DirtyDeveloper看看你已经得到的答案。。。我刚开始写答案,但勒内·沃格特比我快。你的答案似乎很接近,但我有一个顾虑。在stringval也存在的类值处掠夺,我有两个diff构造函数的组合,并且该类对的添加来自第三方dll,我无法将接口实现Iclonable@DirtyDeveloper您不需要在这里实现iClonable。这种方法应该可以正常工作,而不需要对
Pair
类进行任何更改。我删除了我的答案。@DirtyDeveloper正如kazem所说,IClonable是不必要的,您可以使用我在更新的答案中显示的一个构造函数。@RenéVogt我试图复制并粘贴您的代码,但它抛出了一个编译时错误:不包含接受0参数的构造函数。您的答案似乎已关闭,但我有一个问题。在stringval也存在的类值处掠夺,我有两个diff构造函数的组合,并且该类对的添加来自第三方dll,我无法将接口实现Iclonable@DirtyDeveloper您不需要在这里实现iClonable。这种方法应该可以正常工作,而不需要对
Pair
类进行任何更改。我删除了我的答案。@DirtyDeveloper正如kazem所说,IClonable不是必需的,您可以使用我在更新的答案中显示的一个构造函数。@RenéVogt我试图复制并粘贴您的代码,但它引发了编译时错误:不包含带0个参数的构造函数
newPairList = new List<Pair>(PairList);
newPairList = PairList.Select(p => new Pair(p.key, p.intval) {
                         stringVal = p.stringVal,
                         ValType = p.ValType
               }).ToList();