Новый список обновляет исходный - PullRequest
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);
}

Мой результат в консоли - «Новое имя», почему это происходит? Когда я обновляю свой новый список, он также обновляет мой исходный. Как я могу это исправить?

1 Ответ

0 голосов
/ 05 мая 2020

Не волнуйтесь, это нормальное поведение, у вас есть исходный список, затем у вас есть другой список, заполненный оригиналом, в вашем случае оба списка указывают на одни и те же элементы, что означает, что у вас есть две ссылки, которые указывают в том же мемориальном случае, причина, по которой вы меняете элемент из исходного, тот же элемент изменяется во втором, и наоборот.

Случай 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...