在c#中,在我将对象添加到集合后,是否总是创建另一个副本(深层副本)?
答案 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),则将复制该值,如果它是引用类型,则将使用对同一对象的引用的副本。