Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从对象内部进行深度复制_C#_Constructor_Instance_Deep Copy - Fatal编程技术网

C#从对象内部进行深度复制

C#从对象内部进行深度复制,c#,constructor,instance,deep-copy,C#,Constructor,Instance,Deep Copy,我有一个具有许多私有属性的对象。它有一个空构造函数和一个接受自身实例化版本的构造函数。我需要将这个新实例分配给旧实例的深层副本。这能做到吗? 例如: Halp.您可以使用以下方法将对象从一个对象深度复制到另一个对象 public T DeepCloneTheObject<T>(T obj) { using (var ms = new MemoryStream()) { var format

我有一个具有许多私有属性的对象。它有一个空构造函数和一个接受自身实例化版本的构造函数。我需要将这个新实例分配给旧实例的深层副本。这能做到吗? 例如:


Halp.

您可以使用以下方法将对象从一个对象深度复制到另一个对象

public T DeepCloneTheObject<T>(T obj)
        {
            using (var ms = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj);
                ms.Position = 0;

                return (T)formatter.Deserialize(ms);
            }
        }
public T DeepCloneTheObject(T obj)
{
使用(var ms=new MemoryStream())
{
var formatter=新的二进制格式化程序();
序列化(ms,obj);
ms.Position=0;
返回(T)格式化程序。反序列化(ms);
}
}

在您的示例中,您可以说,DeepCloneTheObject(f)

谢谢您的回复,但是我如何将其分配给当前对象呢?我需要使实例的所有属性与克隆的属性相等。我唯一能想到的是类似“this.Object=DeepCloneTheObject(f);”的东西。是的,这样做应该行得通
public T DeepCloneTheObject<T>(T obj)
        {
            using (var ms = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj);
                ms.Position = 0;

                return (T)formatter.Deserialize(ms);
            }
        }