C# 复制静态字段

C# 复制静态字段,c#,static,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... //

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

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 

 }
}
我怎样才能实现我想做的事

你能做到的

MyField = new List<ObjectA>(anotherObjectA);
这将创建列表的副本。但是,对列表中的对象所做的任何更改都将在这两个视图中可见。你必须自己决定你的副本有多深。如果你真的想要一个深度副本,你需要为ObjectA提供一种机制来复制它自己,迭代原始列表,并将每个对象的副本添加到目标列表中。

MyField和另一个ObjectA引用同一个对象。因此,如果您更改MyField,它也会更改另一个ObjectA

因此,首先需要创建两个列表对象:

MyField = new List<ObjectA>(anotherObjectA);
如果要创建完整的副本,还需要在另一个对象a中创建对象的副本


使用此解决方案,更改MyField中的对象不会影响另一个ObjectA中的对象,除非ObjectA还包含引用类型。

MyField和另一个ObjectA引用同一个对象。您应该创建两个对象;但sameList仍然是引用类型。因此,像您这样制作副本将为同一对象添加第二个引用。您需要创建一个新对象MyField=anotherObjectA.ToList,但问题是每当我在anotherObjectA中更改某些内容时,MyField也会更改。不,MyField不会更改。但是MyField引用的列表正在更改。
MyField.First() == anotherObjectA.First() // returns true;
public class ObjectA
{
   public ObjectA() { } // Normal constructor
   public ObjectA(ObjectA objToCopy) { /* copy fields into new object */ }
}

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