当前位置:  开发笔记 > 编程语言 > 正文

阵列的DeepCopy

如何解决《阵列的DeepCopy》经验,为你挑选了1个好方法。

任何人都知道是否有一种简单或已知的方法来编写深度复制方法,它可以在任何类型的数组上工作,即锯齿状,多维等等?我打算把它写成一个扩展方法.

框架中没有默认方法来执行此操作,对吧?我很惊讶没有找到一个.

我已经看到一些基于序列化的实现,它们很慢,所以我想要一个不使用任何类型的序列化的解决方案.



1> Marc Gravell..:

这个问题的现状有点不清楚; 它可能是重复的(在删除的回复中注明),但评论表明这不太合适.

重新序列化降低了速度 - 不幸的是,.NET中没有适当支持的"深度克隆"功能.有ICloneable,但这是:很少使用,和b:没有说明浅或深.因此,深度克隆数据的唯一可靠方法是使用序列化.

重新"慢下来",你能量化吗?使用哪种序列化机制?(BinaryFormatterXmlSerializer?).有关信息,您可能对protobuf-net感兴趣,它是一种非常快速且高效的替代二进制序列化器(并且提供了非常方便的T DeepClone(T)方法) - 但是,它仅适用于以特定方式标记的类(例如,它可以使用[DataContract]标记或定制[ProtoContract]标记.但它比内置的序列化器更快.

唯一可行的选择是编写您自己的,每类型的深层复制例程,并可能将其作为一个FuncConverter委托传递给您的扩展方法.

如果你只想要一个拷贝,事情会更容易,因为你可以使用反射等.这是一个使用编译Expression(.NET 3.5)创建浅拷贝以提高性能的选项.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有