相关疑难解决方法(0)

深度克隆对象

我想做的事情如下:

MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)

然后更改未在原始对象中反映的新对象.

我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.

如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?

.net c# clone

2135
推荐指数
34
解决办法
77万
查看次数

有没有更好的方法在C#中创建深度和浅层克隆?

我一直在为项目创建对象,有些实例我必须为这些对象创建一个深层副本我已经想到了使用C#的内置函数,即MemberwiseClone().困扰我的问题是每当我创建一个新类时,我都必须编写一个类似下面代码的函数来进行浅拷贝.有人请帮助我改进这部分并给我一个更好的浅拷贝比第二行代码.谢谢 :)

SHALLOW COPY:

public static RoomType CreateTwin(RoomType roomType)
{
    return (roomType.MemberwiseClone() as RoomType);
}
Run Code Online (Sandbox Code Playgroud)

深度复制:

public static T CreateDeepClone<T>(T source)
{
    if (!typeof(T).IsSerializable)
    {
        throw new ArgumentException("The type must be serializable.", "source");
    }

    if (Object.ReferenceEquals(source, null))
    {
        return default(T);
    }

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new MemoryStream();
    using (stream)
    {
        formatter.Serialize(stream, source);
        stream.Seek(0, SeekOrigin.Begin);
        return (T)formatter.Deserialize(stream);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# oop cloning

22
推荐指数
2
解决办法
1万
查看次数

为什么克隆(在.NET中)如此困难?

在过去,我需要克隆对象,只是发现它们没有实现Clone()方法,迫使我手动执行(创建一个新实例并将所有属性从原始实例复制到新实例)

为什么克隆不像复制分配对象的内存块那么容易,因此Cloneobject类中有方法,.NET中的所有类都继承它?

.net theory cloning

20
推荐指数
2
解决办法
1578
查看次数

为什么.NET框架不提供深度复制对象的方法?

我前几天使用自定义方法深度克隆对象,我知道你可以用不同的方式深度克隆(反射,二进制序列化等),所以我只是想知道:

微软在框架中不包含深层复制方法的原因是什么?

.net c# deep-copy

6
推荐指数
2
解决办法
1483
查看次数

标签 统计

.net ×4

c# ×3

cloning ×2

clone ×1

deep-copy ×1

oop ×1

theory ×1