c#List <myObject> myList.copyTo()保留引用?

Ger*_*and 2 c# winforms

我有一个List,我使用.copyTo()方法.所以它将我的List复制到一维数组中.

所以我循环这个数组并将每个myObject添加到另一个List,然后我正在改变这个新List中的东西.

在此之后,我将显示第二个List中的新值与第一个List中的旧值之间的差异.但总有一点没有区别.所以我认为copyTo()方法保留了引用.

还有其他方法没有保留参考吗?

Sta*_* R. 8

是..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)