C# 如何在不更改原始列表的情况下更改包含引用类型对象的某些复制列表

C# 如何在不更改原始列表的情况下更改包含引用类型对象的某些复制列表,c#,C#,我有一个列表OriginalList,我将它克隆到另一个列表中 列表人:list CopiedList=OriginalList.ToList() 现在,我将CopiedList传递给某个改变它的方法 我的问题是修改会反映到原始列表中,引用类型实际上是指向对象的指针。由于PropertyDetails也是一种引用类型,复制该列表只会为您提供指向原始对象的指针的新列表。正如Habbib所指出的,您必须创建列表中对象的副本,并构建一个包含这些副本的新列表。如果您这样做:CopiedList[0]=O

我有一个
列表OriginalList
,我将它克隆到另一个列表中 列表人:
list CopiedList=OriginalList.ToList()

现在,我将
CopiedList
传递给某个改变它的方法


我的问题是修改会反映到原始列表中,引用类型实际上是指向对象的指针。由于PropertyDetails也是一种引用类型,复制该列表只会为您提供指向原始对象的指针的新列表。正如Habbib所指出的,您必须创建列表中对象的副本,并构建一个包含这些副本的新列表。

如果您这样做:CopiedList[0]=OriginalList[0],并且对象是引用类型,CopiedList[0]将指向内存中与OriginalList[0]相同的地址。因此,当您更改CopiedList[0]的某些内容时,您将在OriginallList的内存中编辑同一对象。将对象复制到CopiedList时,需要使用OriginallList的相同值创建该对象的新实例。你可以看看这是标准的方法。还有其他与此相关的问题,比如这个:

我想你要做的是克隆你的列表,在不修改原始列表的情况下进行一些更改,对吗

在此处选中@ajm答案:


实际上,您可以创建一个扩展方法来克隆列表:),这应该不难。

您可以展示一下简短但完整的程序吗?您必须在列表中深度复制对象。请参阅:这是用于深度复制对象的。@SonerGönül谢谢您,但它太复杂了。实际上,这是正常的,因为您的列表包含引用对象。所以它只是在内存中引用它们。我认为正如@Habib所说的,这是更好的解决方案。