C# 有没有办法复制对象?就像是:
var dupe = MyClass(original);
我希望它们相等,以便所有数据成员都相同,但不共享相同的内存位置。
您可能正在谈论深层复制(深拷贝与浅拷贝 https://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy)?
您必须:
- 实现(硬编码)你自己的方法,
- 尝试实现(或找到)使用 Reflection 或 Emit 动态执行此操作的实现(解释here https://stackoverflow.com/questions/569154/how-to-deep-copy-between-objects-of-different-types-in-c-net),
- 使用序列化和反序列化来创建深拷贝,如果对象被标记为
[Serializable]
属性。
public static T DeepCopy<T>(T other)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, other);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
要获得浅拷贝,您可以使用Object.MemberwiseClone()
方法,但它是一个受保护的方法,这意味着您只能在类内部使用它。
对于所有深层复制方法,重要的是要考虑对其他对象的任何引用或循环引用,这可能会导致创建比您想要的更深的副本。
⚠️安全警告:请阅读有关使用危险BinaryFormatter https://learn.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide其中可能包括远程代码执行...您可以使用提供的链接中列出的首选替代方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)