我正在使用此代码将一个列表复制到另一个列表
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);
}
我在控制台中的结果是“新名称”,为什么会这样?当我更新新列表时,它也会同时更新原始列表。我该如何解决?
[不用担心,这是正常现象,您拥有原始列表,然后您在原始列表中填充了另一个列表,在这种情况下,两个列表都指向相同的项目,这意味着您有两个引用指向相同的内存情况,为什么要从原始元素更改元素,而在第二个元素中更改相同的元素,反之亦然。
案例1:
public class Person
{
public string Name { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
//here you have the original list, you create your list
//you add element to your list .
var originalList = new List<Person>();
originalList.Add(new Person { Name = "name 1" });
originalList.Add(new Person { Name = "name 2" });
// you create a second list , but here the contain the
// same element than the original list
var newList = new List<Person>(originalList);
newList[0].Name = "New name";
Console.WriteLine(originalList[0].Name);
}