复制静态字段
本文关键字:字段 静态 复制 | 更新日期: 2023-09-27 18:34:05
我有一个类,我在其中操作一些方法。
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
和anotherObjectA
引用同一个对象。因此,如果您更改MyField
它也会更改anotherObjectA
。
所以首先你需要创建两个列表对象:
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 还包含引用类型。