在C#中实现ICollection.CopyTo:深层还是浅层副本?

时间:2015-06-09 02:27:31

标签: c# copy clone interface-implementation

我正在编写一个实现(V)PTEST的自定义类,而且我不确定如何处理IDictionary。是应该将每个元素复制到目标数组(浅层复制),还是应该复制/克隆每个元素,然后将其放在目标数组中(深层复制)?

1 个答案:

答案 0 :(得分:5)

合同没有定义实现,但是所有通用集合似乎都是浅层副本(参见http://referencesource.microsoft.com/#q=List.CopyTo)。这是有道理的,因为没有定义的方法来深层复制任何object,这将是CopyTo实现的一部分。

这取决于您的场景,如果您根本不打算使用此方法,请考虑不实现它并抛出NotSupportedException。如果其他人将使用您的集合,请实现浅拷贝以与标准.NET库对齐。如果您需要深层复制方法,请将其作为单独的方法添加(可能通过实施ICloneable)。