我有
class A
{
public int a;
public string b;
}
Run Code Online (Sandbox Code Playgroud)
如何将A复制到另一个A?在C++我知道我能做到*a1 = *a2;.C#中有类似的东西吗?我知道我可以用反射写一个通用的解决方案,但我希望已经存在的东西.
我正在考虑将A更改为可以为空的结构.
第2步我需要做
class B : A {}
class C : A {}
Run Code Online (Sandbox Code Playgroud)
并将基础数据从B复制到C.
我使用了二进制序列化.基本上,将实例序列化为内存流.然后,将其反序列化为内存流.您将拥有一个精确的二进制副本.它将是一个深层复制,而不是浅层复制.
class a = new ClassA();
class b = MySerializationMethod(a);
Run Code Online (Sandbox Code Playgroud)
对于浅拷贝,您可以使用 Object.MemberwiseClone
小智 7
这是一些适用于任何类的简单代码,而不仅仅是基类.
public static void DuckCopyShallow(this Object dst, object src)
{
var srcT = src.GetType();
var dstT= dst.GetType();
foreach(var f in srcT.GetFields())
{
var dstF = dstT.GetField(f.Name);
if (dstF == null)
continue;
dstF.SetValue(dst, f.GetValue(src));
}
foreach (var f in srcT.GetProperties())
{
var dstF = dstT.GetProperty(f.Name);
if (dstF == null)
continue;
dstF.SetValue(dst, f.GetValue(src, null), null);
}
}
Run Code Online (Sandbox Code Playgroud)
假设A只是一个简单的类,你可以这样做
A newA = instanceOfA.MemberwiseClone();
Run Code Online (Sandbox Code Playgroud)
不过 MemberwiseClone() 是一个浅表复制,因此如果您的类变得复杂,并且属性也是引用类型,那么这对您不起作用。
| 归档时间: |
|
| 查看次数: |
17095 次 |
| 最近记录: |