在C#中自动化复制构造函数

时间:2013-06-17 20:06:11

标签: c# .net visual-studio-2012

我正在努力找到制作一个相当大的班级的最佳方法。它有大约80个属性。我当然可以在普通的拷贝构造函数中对它们进行编码,但我不确定它在代码中看起来有多好。

所以我在想...有没有办法迭代obj A的属性并将值分配给obj B的相应属性?

此任务标记为重复,但事实并非如此。我的问题不是如何进行深层复制,问题是如何遍历属性,从而制作具有许多属性的普通复制构造函数。

1 个答案:

答案 0 :(得分:4)

这是一种方式:

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);
    }
}

这改编自CLR via C# by Jeffrey Richter

你这样使用它:

var objB = DeepClone(objA);

该类型必须是可序列化的才能使其正常工作。