8

这应该是一个非常基本的问题,但我一直很难找到一个明确的答案。

当您有一个值数组并使用该.ToArray()方法时,它会创建数组的深副本还是浅副本?

4

2 回答 2

12

不。

您可以通过编写一个小程序进行测试来轻松验证这一点。

于 2012-04-30T16:50:30.863 回答
3

严格来说,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
于 2020-12-13T12:35:19.717 回答