Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 集合复制行为问题_C#_.net - Fatal编程技术网

C# 集合复制行为问题

C# 集合复制行为问题,c#,.net,C#,.net,在c#中,在向集合添加对象后,是否始终创建另一个副本(深度副本)?否,如果它是类,则大多数对象都是,集合中只存储对同一对象的引用 如果它是一个值类型,如int、double和structs,则会创建一个副本(如果struct引用了一个类对象,而该类对象又不会被复制,则不是深度副本) 编辑: 要深度复制对象,首先需要创建深度复制功能。 看看或 然后,可以在将项目添加到集合之前运行深度复制方法 注意 你并不经常真的需要真正的深度拷贝。通常最好重新考虑应用程序中的数据流。不,如果它是类,则大多数对象都

在c#中,在向集合添加对象后,是否始终创建另一个副本(深度副本)?

否,如果它是类,则大多数对象都是,集合中只存储对同一对象的引用

如果它是一个值类型,如int、double和structs,则会创建一个副本(如果struct引用了一个类对象,而该类对象又不会被复制,则不是深度副本)

编辑:
要深度复制对象,首先需要创建深度复制功能。
看看或
然后,可以在将项目添加到集合之前运行深度复制方法

注意

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

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

如果它是一个值类型,如int、double和structs,则会创建一个副本(如果struct引用了一个类对象,而该类对象又不会被复制,则不是深度副本)

编辑:
要深度复制对象,首先需要创建深度复制功能。
看看或
然后,可以在将项目添加到集合之前运行深度复制方法

注意

你并不经常真的需要真正的深度拷贝。通常,最好重新考虑应用程序中的数据流。

如果您想了解集合发生了什么,那么这取决于:

通常,将使用一些“空”插槽创建集合,因此添加到集合中不会导致创建具有新大小的新集合

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


如果您询问的是项目本身,这同样取决于:


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

如果您询问集合的情况,则取决于:

通常,将使用一些“空”插槽创建集合,因此添加到集合中不会导致创建具有新大小的新集合

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


如果您询问的是项目本身,这同样取决于:


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

那么如何进行深度复制集合?那么如何进行深度复制集合?