gpt4 book ai didi

c# - 在 C# 中进行深层复制是否有更简单的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:57 25 4
gpt4 key购买 nike

所以我写了一个程序,我需要在其中对几个对象进行深拷贝。在我的例子中,我不能使用可以轻松解决这个问题的序列化。有没有另一种方法可以解决这个问题而无需手动复制类中的所有属性?

最佳答案

您可以使用反射来做到这一点。代码项目有一个例子:http://www.codeproject.com/Articles/38270/Deep-copy-of-objects-in-C

更新 1
StackOverflow 上也有使用 BinaryFormatter 的示例,如您问题的评论中所述:

How do you do a deep copy of an object in .NET (C# specifically)?
Deep cloning objects

如果你想要另一种方法,那么如果可能的话,你可以让你所有的类都实现ICloneable,使用MemberwiseClone ,并使用递归进行深拷贝。就个人而言,我会从 BinaryFormatter 开始。

更新 2
如果 GameComponent 不可序列化(从文档判断它似乎不是),那么您可以使用此模式来帮助创建派生自 GameComponent 的类的副本.将您需要复制的所有数据包装在其自己的类中并将该类标记为可序列化,然后在您的 GameComponent 类上实现 ICloneable。例如:

public class MyGameComponent : GameComponent, ICloneable
{
public MyGameComponent(Game game) : base(game) { }
public MyGameComponentData MyGameComponentData { get; set; }

public object Clone()
{
var clone = (MyGameComponent)MemberwiseClone();

var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, this.MyGameComponentData);
stream.Seek(0, SeekOrigin.Begin);
clone.MyGameComponentData =
(MyGameComponentData)formatter.Deserialize(stream);
}

return clone;
}
}

[Serializable]
public class MyGameComponentData
{
public string Data1 { get; set; }
public List<string> Data2 { get; set; }
}

关于c# - 在 C# 中进行深层复制是否有更简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com