hrh*_*hrh 6 c# arrays deep-copy shallow-copy toarray
这应该是一个非常基本的问题,但我找到一个明确的答案时遇到了一些麻烦.
如果您有一个值数组并且使用该.ToArray()方法,它是否会创建数组的深层或浅层副本?
Dom*_*nic 13
没有.
您可以通过编写一个小程序来轻松验证这一点.
严格来说,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
Run Code Online (Sandbox Code Playgroud)