这应该是一个相当基本的问题,但我一直有些难以找到明确的答案。
当你有一个值数组并使用 .ToArray()
方法时,它会创建一个深层复制还是浅层复制?
这应该是一个相当基本的问题,但我一直有些难以找到明确的答案。
当你有一个值数组并使用 .ToArray()
方法时,它会创建一个深层复制还是浅层复制?
不需要。
你可以编写一个小程序来进行验证,这很容易。
严格来讲,ICollection.ToArray()
方法会创建一个新的 T[]
数组,并使用 Array.CopyTo()
方法将原始集合中的每个元素分配给新数组。
如果 T
是值类型,则会分配值而不是引用。这将表现为我们所期望的 "深拷贝"。
int[] foo = { 1, 2, 3, 4 };
int[] bar = foo.ToArray();
for (int i = 0; i < foo.Length; i++) foo[i] += 10;
Console.WriteLine(string.Join(',', foo)); // 11, 12, 13, 14
Console.WriteLine(string.Join(',', bar)); // 1, 2, 3, 4