在 C# 中,如果将列表中的对象添加到另一个列表中,更改第二个列表中的对象是否会更改第一个列表中的同一对象?

In C# if an object in a list is added to another list, does changing the object in the second list change the same object in the first list?

假设我有一个名为 personsPerson 个对象 (List<Person>) 的列表,如下所示:

class Person
{
    public int PersonId { get; set; } // Unique ID for the person loaded from database
    public string Name { get; set; }
}

// In a different class
public List<Person> Persons = new List<Person>(); // Person objects are subsequently added to the list

然后我 select 列表中的一些 Person 对象,按 属性(例如每个人的唯一 ID PersonId)对它们进行排序,然后将这些 selected Person 对象添加到另一个名为 selectedPersons.
的列表中 我现在需要编辑 selectedPersonsPerson 对象的属性,但需要对 persons 中此 Person 对象的原始副本进行这些更改。我目前只知道 selectedPersons 列表中此人的索引,所以 我可以简单地编辑 selectedPersons 列表中的人并将对该人所做的更改反映在原始列表中吗persons 列表,像这样:

selectedPersons[selectedPersonIndex].Name = "John";

我是否必须首先找到 persons 列表 中的原始 Person 对象? ] 使用此人的 ID 列出,如下所示:

persons[FindPersonIndexById(selectedPersons[selectedPersonIndex].BookingId).Name = "John";

其中 FindPersonIndexById returns persons 中 ID 与给定 ID 匹配的人的索引。
我知道列表是 C# 中的引用类型,但是,当将一个列表中的对象添加到另一个列表时,我不确定对第二个列表中的对象所做的更改是否会自动对第二个列表中的相同对象进行更改第一个列表.

当你有一个对象列表是引用类型而不是值类型时,存储在列表中的是列表中每个对象的引用。因此,如果将同一个对象添加到两个不同的列表,实际上是将相同的引用添加到第二个列表。因此,如果您对对象进行任何更改,这将是两个列表中的 "visible"。

由于 Person 是引用类型 (class),更改列表中项目的名称将更改 Person 对象的名称,并且对该对象的所有引用现在都将看到新名称。如果是结构体就不会这样了。