我有一个对象列表,我将它们通过参数传递给一个函数。我想用一些不同的值来编辑它!因为当我从列表中更改项目时,它是否也会从Pessons列表中更改?它就像访问相同的内存位置,但我只想复制列表并更改它而不会导致更改其他列表。
public void GerarPorLider(List<Person> Persons)
{
List<Person> p = Persons;
p[0].Amount += 10;
}
执行此代码时发生的输出
人[0] .Amount = 17; p [0] .Amount = 17;
我期待它的方式
人[0] .Amount = 7; p [0] .Amount = 17;
我该怎么做?
答案 0 :(得分:4)
这一行
List<Person> p = Persons;
不复制Persons
列表,它会为其创建别名。您对p
所做的任何修改实际上都是Persons
列表的修改,只是通过不同的别名。
此外,列表中的Person
对象也需要复制。
假设有Person
的构造函数需要复制Person
,请使用以下方法:
List<Person> p = Persons.Select(x => new Person(x)).ToList();
如果Person
没有复制构造函数,请一次复制一个属性:
List<Person> p = Persons.Select(x => new Person {
// I am making up the properties of `Person` to be copied;
// you need to use the actual ones.
Name = x.Name
, LastName = x.LastName
, Address = x.Address
}).ToList();