新列表更新原始列表

问题描述 投票:1回答:1

我正在使用此代码将一个列表复制到另一个列表

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);
}

我在控制台中的结果是“新名称”,为什么会这样?当我更新新列表时,它也会同时更新原始列表。我该如何解决?

c# list collections
1个回答
0
投票

[不用担心,这是正常现象,您拥有原始列表,然后您在原始列表中填充了另一个列表,在这种情况下,两个列表都指向相同的项目,这意味着您有两个引用指向相同的内存情况,为什么要从原始元素更改元素,而在第二个元素中更改相同的元素,反之亦然。

案例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);
}
© www.soinside.com 2019 - 2024. All rights reserved.