实现ICollection.c#中的CopyTo:深拷贝或浅拷贝

本文关键字:深拷贝 浅拷贝 CopyTo ICollection 中的 实现 | 更新日期: 2023-09-27 17:54:34

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

实现ICollection.c#中的CopyTo:深拷贝或浅拷贝

实现不是由契约定义的,但是所有泛型集合似乎都做了一个浅复制(参见http://referencesource.microsoft.com/#q=List.CopyTo)。这是有意义的,因为没有定义的方法来深度复制任何object,这将是CopyTo实现的一部分。

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