Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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# 如何在C中将一个列表复制到另一个列表#_C#_List - Fatal编程技术网

C# 如何在C中将一个列表复制到另一个列表#

C# 如何在C中将一个列表复制到另一个列表#,c#,list,C#,List,我有一个列表,我想复制到另一个列表 我有“employeeAddressDataToSave”列表,我想将此列表复制到“EmployeeAddressDataToSaveTurn”列表 我使用下面的代码来实现这一点。设置好后,再往前走,我将更新EmployeeAddressDataToSaveList。这些更改将自动进入“employeeAddressDataToSaveReturn”列表。我不希望我的EmployeeAddressDataToSaveTurn列表随着对employeeAddre

我有一个列表,我想复制到另一个列表

我有“employeeAddressDataToSave”列表,我想将此列表复制到“EmployeeAddressDataToSaveTurn”列表

我使用下面的代码来实现这一点。设置好后,再往前走,我将更新EmployeeAddressDataToSaveList。这些更改将自动进入“employeeAddressDataToSaveReturn”列表。我不希望我的EmployeeAddressDataToSaveTurn列表随着对employeeAddressDataToSave的更改而更新。有办法吗

employeeAddressDataToSaveReturn = new List<Address>(employeeAddressDataToSave);
EmployeeAddressDataToSaveTurn=新列表(employeeAddressDataToSave);
您正在执行一系列操作。该列表是两个单独的列表,但列表中的项目在它们之间共享。如果您编辑的是一个项目,而不是列表本身,则编辑内容将同时显示在两个列表中

在创建新列表时,您需要提供一些方法来复制
地址

employeeAddressDataToSaveReturn = new List<Address>(employeeAddressDataToSave.Select(x=>x.Copy());`
如果
Address
包含嵌套类,您也需要为它们编写
Copy()
方法,并递归调用
Copy()

您正在执行一个嵌套类。该列表是两个单独的列表,但列表中的项目在它们之间共享。如果您编辑的是一个项目,而不是列表本身,则编辑内容将同时显示在两个列表中

在创建新列表时,您需要提供一些方法来复制
地址

employeeAddressDataToSaveReturn = new List<Address>(employeeAddressDataToSave.Select(x=>x.Copy());`

如果
Address
包含嵌套类,您也需要为它们编写
Copy()
方法,并递归调用
Copy()

您的列表不包含地址数据项,它们包含对地址数据项的引用。这些列表是独立的,这意味着如果将对地址的引用添加到列表2中,则不会将其添加到列表1中:

var list1 = GetList1();
Console.WriteLine(list1.Count); // 3
var list2 = new List(list1);
list2.Add(new AddressData("John Doe", "Foo street", "12345"); 
Console.WriteLine(list1.Count); // 3
Console.WriteLine(list2.Count); // 4
但是,如果您编辑列表1中的某个项目,您还将在其他列表中对其进行修改

Console.WriteLine(list1[2].Name); // Bob
Console.WriteLine(list2[2].Name); // Bob
list2[2].Name = "Jim";
Console.WriteLine(list1[2].Name); // Jim <-- Changed
Console.WriteLine(list2[2].Name); // Jim 

您的列表不包含地址数据项,它们包含对地址数据项的引用。这些列表是独立的,这意味着如果将对地址的引用添加到列表2中,则不会将其添加到列表1中:

var list1 = GetList1();
Console.WriteLine(list1.Count); // 3
var list2 = new List(list1);
list2.Add(new AddressData("John Doe", "Foo street", "12345"); 
Console.WriteLine(list1.Count); // 3
Console.WriteLine(list2.Count); // 4
但是,如果您编辑列表1中的某个项目,您还将在其他列表中对其进行修改

Console.WriteLine(list1[2].Name); // Bob
Console.WriteLine(list2[2].Name); // Bob
list2[2].Name = "Jim";
Console.WriteLine(list1[2].Name); // Jim <-- Changed
Console.WriteLine(list2[2].Name); // Jim 

搜索深度复制,深度克隆您需要实现原型设计模式来解决问题,以避免一个列表中的更改不影响另一个列表。搜索深度复制,深度克隆您需要实现原型设计模式来解决问题,以避免一个列表中的更改不影响另一个列表。