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

Rub*_*922 2 c# list object reference-type

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

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
Run Code Online (Sandbox Code Playgroud)

然后我Person从列表中选择一些对象,按属性(例如,按每个人的唯一 ID PersonId)对它们进行排序,然后将这些选定的Person对象添加到另一个名为 的列表中selectedPersons
我现在需要编辑的属性Person对象,它是在selectedPersons,但需要这个的正本作出这些改变Person对象persons。我目前只知道selectedPersons列表中此人的索引,所以我可以简单地编辑selectedPersons列表中的人并将对该人所做的更改反映在原始persons列表中,如下所示:

selectedPersons[selectedPersonIndex].Name = "John";
Run Code Online (Sandbox Code Playgroud)

或者我是否必须Personpersons首先persons使用人员的 ID查找列表中人员的索引来编辑列表中的原始对象,如下所示:

persons[FindPersonIndexById(selectedPersons[selectedPersonIndex].BookingId).Name = "John";
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*tos 7

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