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