【发布时间】:2020-05-05 18:26:33
【问题描述】:
我在这里使用此代码将一个列表复制到另一个列表
public class Person
{
public string Name { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
var originalList = new List<Person>();
originalList.Add(new Person { Name = "name 1" });
originalList.Add(new Person { Name = "name 2" });
// var newList = originalList.ToList();
var newList = new List<Person>(originalList);
newList[0].Name = "New name";
Console.WriteLine(originalList[0].Name);
}
我在控制台中的结果是“新名称”,为什么会这样?当我更新我的新列表时,它也会更新我原来的列表。我该如何解决这个问题?
【问题讨论】:
-
您只完成了列表的克隆,而不是其中的每个项目。新列表具有与原始列表相同的项目。您正在修改两个列表中存在于
[0]的实例。你需要做一个深拷贝。 -
您的列表包含对象的引用。如果您创建一个新列表,您只需复制对这些对象的引用。如果您更改其中一个对象,则引用不会更改。
-
这能回答你的问题吗? How do I clone a generic list in C#?
-
这也不例外。可以这样想:你的老板让你在工作中加入第二个团队。那不会创建您的副本。到目前为止,您尝试过的任何操作都不会创建对象的副本,只会创建对这些对象的引用。
标签: c# list collections