任何人都知道是否有一种简单或已知的方法来编写深度复制方法,它可以在任何类型的数组上工作,即锯齿状,多维等等?我打算把它写成一个扩展方法.
框架中没有默认方法来执行此操作,对吧?我很惊讶没有找到一个.
我已经看到一些基于序列化的实现,它们很慢,所以我想要一个不使用任何类型的序列化的解决方案.
这个问题的现状有点不清楚; 它可能是重复的(在删除的回复中注明),但评论表明这不太合适.
重新序列化降低了速度 - 不幸的是,.NET中没有适当支持的"深度克隆"功能.有ICloneable,但这是:很少使用,和b:没有说明浅或深.因此,深度克隆数据的唯一可靠方法是使用序列化.
重新"慢下来",你能量化吗?使用哪种序列化机制?(BinaryFormatter?XmlSerializer?).有关信息,您可能对protobuf-net感兴趣,它是一种非常快速且高效的替代二进制序列化器(并且提供了非常方便的T DeepClone<T>(T)方法) - 但是,它仅适用于以特定方式标记的类(例如,它可以使用[DataContract]标记或定制[ProtoContract]标记.但它比内置的序列化器更快.
唯一可行的选择是编写您自己的,每类型的深层复制例程,并可能将其作为一个Func<T,T>或Converter<T,T>委托传递给您的扩展方法.
如果你只想要一个浅拷贝,事情会更容易,因为你可以使用反射等.这是一个使用编译Expression(.NET 3.5)创建浅拷贝以提高性能的选项.
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |