复制静态字段

时间:2013-10-04 13:02:10

标签: c# static

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

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 

 }
}

我如何实现我想要的目标

2 个答案:

答案 0 :(得分:7)

你可以做到

MyField = new List<ObjectA>(anotherObjectA);

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

答案 1 :(得分: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还包含引用类型。