所以我试图找到一个通用的扩展方法,它使用反射创建一个对象的深拷贝,它可以在 Silverlight 中工作。使用序列化的深度复制在 Silverlight 中不是很好,因为它以部分信任的方式运行并且 BinaryFormatter 不存在。我也知道反射比克隆的序列化更快。
如果有一种方法可以复制公共(public)、私有(private)和 protected 字段,并且是递归的,这样它就可以复制对象中的对象,并且还能够处理集合、数组等,那就太好了。
网上查了下,只能找到利用反射实现的浅拷贝。我不明白为什么,因为你可以只使用 MemberwiseClone,所以对我来说,那些实现是无用的。
谢谢。
最佳答案
对于数据契约对象,我们使用了以下辅助方法在 Silverlight 中进行深度克隆:
public static T Clone<T>(T source)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, source);
ms.Seek(0, SeekOrigin.Begin);
return (T)serializer.ReadObject(ms);
}
}
这样使用:
var clone = CloneHelper.Clone<MyDTOType>(dtoVar);
关于c# - 在 Silverlight 的扩展方法中使用反射的深度复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13198658/