集合复制行为问题

时间:2010-11-16 10:48:45

标签: c# .net

在c#中,在我将对象添加到集合后,是否总是创建另一个副本(深层副本)?

2 个答案:

答案 0 :(得分:2)

不,如果它是一个类,大多数对象都是,只有对同一个对象的引用存储在集合中。

如果它是一个值类型,比如int,double和structs一个副本(不是深层副本,如果struct有一个类对象的引用,而不会被复制)。

修改
要深度复制对象,首先需要创建深层复制功能 请查看Create a Deep Copy in C#How to make a deep copy in C# ?
然后,您可以在将项目添加到集合之前运行深层复制方法。

注意
你不是经常需要一个真正的深拷贝。通常最好重新考虑应用程序中的数据流。

答案 1 :(得分:1)

如果您询问集合会发生什么,那么取决于:

通常情况下,将使用一些“空”插槽创建一个集合,因此添加它不会导致创建具有新大小的新集合。

但是,如果添加新项目超出此大小,则会创建一个新集合并将所有项目复制到该集合。


如果您询问该项目本身,则取决于:

如果它是值类型(例如int,double,structs),则将复制该值,如果它是引用类型,则将使用对同一对象的引用的副本。