我试图找到在C#中返回数组的一部分的最快方法 我目前的方式如下:
// .. set int moveCount ..
// .. set int[] childArray ..
int[] realArray = new int[moveCount];
Array.Copy(childArray, realArray, moveCount);
return realArray;
这是我在网上到处看到的方式,但是 我想知道数组现在是否会复制两次。一次因为我这样做,一次因为回来。
答案 0 :(得分:8)
不,当你返回时,你会将引用返回到你刚创建的数组。该参考文献将被复制,但这很便宜。
所有数组都是引用类型,即使数组的元素类型是值类型(因此int[]
是引用类型,即使int
是值类型)。
现在您仍然可以考虑返回ArraySegment<int>
而不是int[]
- 这样您就不会在数组中复制任何值。另一方面,如果原始数组被更改,那些更改将影响调用者看到的内容(同样调用者可以更改数组内容)。
答案 1 :(得分:3)
不,您的假设是错误的,您的return语句返回对创建的数组的引用。所以不,你没有创建返回的数组的两个副本。关于块复制的部分,我认为你的Array.Copy是最好的权衡。
答案 2 :(得分:1)
如果您想使用LINQ Take
:
return realArray.Take(numberOfItems);
注意:这适用于将数组中的第一个元素转换为N个元素