我有一个List,我使用.copyTo()方法.所以它将我的List复制到一维数组中.
所以我循环这个数组并将每个myObject添加到另一个List,然后我正在改变这个新List中的东西.
在此之后,我将显示第二个List中的新值与第一个List中的旧值之间的差异.但总有一点没有区别.所以我认为copyTo()方法保留了引用.
还有其他方法没有保留参考吗?
是..CopyTo()执行浅拷贝,这意味着它复制引用.您需要的是通过克隆每个对象来进行深层复制.
最好的方法是让你的myObject类实现IClonable
public class YourClass
{
public object Clone()
{
using (var ms = new MemoryStream())
{
var bf = new BinaryFormatter();
bf.Serialize(ms, this);
ms.Position = 0;
object obj = bf.Deserialize(ms);
ms.Close();
return obj;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在每个对象上加入.Clone()并将其添加到新的List中.
List<YourClass> originalItems = new List<YourClass>() { new YourClass() };
List<YourClass> newItemList = originalItems.Select(x => x.Clone() as YourClass).ToList();
Run Code Online (Sandbox Code Playgroud)