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

标签 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

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

selectedPersons[selectedPersonIndex].Name = "John";

我必须编辑原始的Person吗? persons 中的对象通过首先找到 persons 人的索引来列出使用此人的 ID 列出,如下所示:

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

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

最佳答案

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

关于c# - 在 C# 中,如果将列表中的对象添加到另一个列表中,更改第二个列表中的对象是否会更改第一个列表中的同一对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28783768/

相关文章:

c# - 在 dataGridView 中创建自定义格式字符串

Python:是否可以有一个类方法作用于类的一部分?

javascript - 将 js 对象作为 json 传递给 jquery?

javascript - 如何从同一对象的函数内部的函数传递对象的函数?

html - 添加列表时 Logo 移出菜单

java - 创建新对象

c# - 如何在 C# 中获取另一个节点值指定的节点值

c# - 可处理对象中的构造函数异常

c# - 如何在C#.net中使用Vscrollbar滚动pdf文档?

javascript - 列表到 Jquery 数据表 c#