0

我有一个类,我在其中操作一些方法。

public class MyClass
{
  public static List<ObjectA> MyField;

  public static Object MyMethod()
  {
      List<ObjectA> anotherObjectA = new List<ObjectA>();
      // I do something with anotherObjectA...
      // after processing something now I want to keep the current status of                anotherObjectA to MyField:
      MyField = anotherObjectA;
      // and now I want to work just with anotherObjectA. The problem is that whatever   I work with anotherObjectA it changes also MyField 

 }
}

我怎样才能实现我想要做的事情

4

2 回答 2

7

你可以做

MyField = new List<ObjectA>(anotherObjectA);

这将创建列表的副本。但是,对列表中对象的任何更改都将在两者中可见。您必须自己决定副本的深度。如果你真的想要一个深拷贝,你需要提供一种机制ObjectA来制作自身的副本,迭代原始列表,并将每个对象的副本添加到目标列表中。

于 2013-10-04T13:04:46.167 回答
1

MyFieldanotherObjectA引用同一个对象。所以如果你改变MyField它也会改变anotherObjectA

所以首先你需要创建两个 List 对象:

MyField = new List<ObjectA>(anotherObjectA);

这将创建两个列表对象,但列表ObjectA中的对象仍然引用相同的对象。

MyField.First() == anotherObjectA.First() // returns true;

如果要制作完整的副本,还需要在其中创建对象的副本anotherObjectA

public class ObjectA
{
   public ObjectA() { } // Normal constructor
   public ObjectA(ObjectA objToCopy) { /* copy fields into new object */ }
}

MyField = anotherObjectA.Select(obja => new ObjectA(obja)).ToList();

使用此解决方案,更改内部对象MyField不会影响内部对象,anotherObjectA除非 ObjectA 还包含引用类型。

于 2013-10-04T13:27:04.440 回答