【发布时间】:2018-05-07 09:51:37
【问题描述】:
我正在使用 .NET Framework 4.7 开发 C# 库。
我有两个List<byte>,我想将其中一个中的所有元素复制到另一个。
我想重用列表,所以当我必须将一个列表的内容复制到另一个列表时,我不想创建一个新列表。
List<byte> list1 = new List<byte>() { 1, 2, 3, 4, 5, 6 };
List<byte> list2 = new List<byte>() { 7, 8, 9, 10, 11, 12 };
如果我想将list2的内容复制到list1中,如果我想将list1的内容替换为list2的内容该怎么办?
我想复制这些值,而不是复制对list2 中值的引用。如果我修改 list2 中的值,我不希望在 list1 中进行该修改。
我在List<T> 中没有找到任何进行深拷贝的方法。我认为我唯一可以使用的是AddRange,但我还没有找到任何关于此方法是否进行深度复制或吞咽复制的参考。
如果要将list1的内容替换为list2的内容做深拷贝,该怎么办?
【问题讨论】:
-
深/浅并不真正适用于值类型。如果一个类型不是引用类型并且不包含任何引用,那么复制它会复制它包含的所有内容。
-
简单值类型(
byte、int)原位存储在Lists 中,而不是作为引用。 -
为了清楚起见,
.AddRange实际上做了一个浅拷贝,但正如其他人所说,当你复制的是原始值类型时,这个事实毫无意义,你正在复制无论如何,价值,而不是对它的引用。然而,复制包含引用的值类型会很麻烦。您将获得值类型部分的副本,但该副本也将包含引用的副本,因此它所引用的对象不会被复制。