这应该是一个非常基本的问题,但我一直很难找到一个明确的答案。
当您有一个值数组并使用该.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