阵列的DeepCopy

Joa*_*nge 1 .net c#

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

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

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

Mar*_*ell 5

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

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

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

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

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