在C#中,如果列表中的一个对象被添加到另一个列表中,那么更改第二个列表中的对象是否会更改第一个列表中的相同对象?
假设我有一个名为在C#中,如果列表中的一个对象被添加到另一个列表中,那么更改第二个列表中的对象是否会更改第一个列表中的相同对象?,c#,list,object,reference-type,C#,List,Object,Reference Type,假设我有一个名为Person的Person对象列表(list),如下所示: 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&l
Person
的Person
对象列表(list
),如下所示:
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
selectedPersons[selectedPersonIndex].Name = "John";
persons[FindPersonIndexById(selectedPersons[selectedPersonIndex].BookingId).Name = "John";
或者我是否必须首先使用人员ID在人员
列表中查找人员的索引,从而编辑人员
列表中的原始人员
对象,如下所示:
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
selectedPersons[selectedPersonIndex].Name = "John";
persons[FindPersonIndexById(selectedPersons[selectedPersonIndex].BookingId).Name = "John";
其中FindPersonIndexById
返回persons
中ID与给定ID匹配的人员的索引。我知道列表是C#中的引用类型,但是,当一个列表中的对象添加到另一个列表中时,我不确定对第二个列表中的对象所做的更改是否会自动添加到第一个列表中的相同对象当您有一个属于引用类型而不是值类型的对象列表时,存储在列表中的是列表中每个对象的引用。因此,如果将同一对象添加到两个不同的列表中,实际上会将相同的引用添加到第二个列表中。因此,如果您对对象进行任何更改,这将从两个列表中“可见”。当您有一个属于引用类型而非值类型的对象列表时,存储在列表中的对象是列表中每个对象的引用。因此,如果将同一对象添加到两个不同的列表中,实际上会将相同的引用添加到第二个列表中。因此,如果对对象进行任何更改,这将从两个列表中“可见”。因为Person是引用类型(类),更改列表中项目的名称将更改Person对象的名称,并且对该对象的所有引用现在都将看到新名称。如果它是一个结构,则不会是这种情况。因为Person是一个引用类型(类),更改列表中项目的名称将更改Person对象的名称,并且对该对象的所有引用现在都将看到新名称。如果它是一个结构,则不会是这种情况。您有两个不同的列表实例。。。但它们包含对同一个人对象的引用。所以,你对任何列表中的任何人所做的任何更改,都会在两个列表中修改相同的person对象。你为什么不简单地测试它?这么简单的几行代码,为什么要在这里提问?@DavidG是的,我想是的,虽然通过在这里提问,我确切地知道为什么某些东西以特定的方式工作,而不仅仅是它工作,这是否回答了你的问题?您有两个不同的列表实例。。。但它们包含对同一个人对象的引用。所以,你对任何列表中的任何人所做的任何更改,都会在两个列表中修改相同的person对象。你为什么不简单地测试它?这么简单的几行代码,为什么要在这里提问?@DavidG是的,我想是的,虽然通过在这里提问,我确切地知道为什么某些东西以特定的方式工作,而不仅仅是它工作,这是否回答了你的问题?