在 C# 中实现 ICollection.CopyTo:深拷贝还是浅拷贝?
Implementing ICollection.CopyTo in C#: deep or shallow copy?
我正在编写实现 IDictionary
的自定义 class,但我不确定如何处理 CopyTo
。应该只将每个元素复制到目标数组(浅复制),还是应该对每个元素制作 copy/clone 然后将其放入目标数组(深复制)?
合同未定义实施,但所有通用集合似乎都执行浅拷贝(请参阅 http://referencesource.microsoft.com/#q=List.CopyTo)。这是有道理的,因为没有定义的方法来深度复制任何 object
,这将是 CopyTo
实现的一部分。
这取决于你的场景,如果你根本不打算使用这个方法,可以考虑不实现它并抛出一个NotSupportedException
。如果其他人将使用您的集合,请实施浅拷贝以与标准 .NET 库保持一致。如果您需要深层复制方法,请将其添加为单独的方法(可能通过实施 ICloneable
)。
我正在编写实现 IDictionary
的自定义 class,但我不确定如何处理 CopyTo
。应该只将每个元素复制到目标数组(浅复制),还是应该对每个元素制作 copy/clone 然后将其放入目标数组(深复制)?
合同未定义实施,但所有通用集合似乎都执行浅拷贝(请参阅 http://referencesource.microsoft.com/#q=List.CopyTo)。这是有道理的,因为没有定义的方法来深度复制任何 object
,这将是 CopyTo
实现的一部分。
这取决于你的场景,如果你根本不打算使用这个方法,可以考虑不实现它并抛出一个NotSupportedException
。如果其他人将使用您的集合,请实施浅拷贝以与标准 .NET 库保持一致。如果您需要深层复制方法,请将其添加为单独的方法(可能通过实施 ICloneable
)。