自动化c#中的复制构造函数

本文关键字:复制 构造函数 自动化 | 更新日期: 2023-09-27 18:18:42

我正试图找到最好的方法来复制一个相当大的类。它大约有80处房产。当然,我可以在普通的复制构造函数中对它们进行编码,但我不确定这样做在代码中看起来有多好。

所以我想…是否有一种方法来迭代对象a的属性,并将值分配给对象B的相应属性?

这个问题被标记为重复,但它不是。我的问题不是如何进行深度复制,问题是如何通过属性进行迭代,从而使具有许多属性的普通复制构造函数。

自动化c#中的复制构造函数

有一种方法:

public static T DeepClone<T>(T original)
{
    if (!typeof(T).IsSerializable)
    {
        throw new ArgumentException("The type must be serializable.", "original");
    }
    if (ReferenceEquals(original, null))
    {
        return default(T);
    }
    using (var stream = new MemoryStream())
    {
        var formatter = new BinaryFormatter
        {
            Context = new StreamingContext(StreamingContextStates.Clone)
        };
        formatter.Serialize(stream, original);
        stream.Position = 0;
        return (T) formatter.Deserialize(stream);
    }
}

本文由Jeffrey Richter通过c#改编自CLR。

你可以这样使用:

var objB = DeepClone(objA);