返回数组的一部分

Aar*_*man 0 c# arrays

我试图找到以C#返回数组的一部分的最快方法我目前的方式如下:

// .. set int moveCount ..
// .. set int[] childArray ..
int[] realArray = new int[moveCount];
Array.Copy(childArray, realArray, moveCount);
return realArray;
Run Code Online (Sandbox Code Playgroud)

这是我在网上到处看到的方式,但我想知道现在是否会复制数组两次.一次是因为我这样做了,一次因为回来了.

  • 这是正确的假设吗?
  • 有没有更好的办法?我知道Buffer.BlockCopy.

Jon*_*eet 8

不,当你返回时,你将返回你刚刚创建的数组的引用.该参考文献将被复制,但这很便宜.

所有数组都是引用类型,即使数组的元素类型是值类型(int[]即使int是值类型也是引用类型).

现在你仍然可以考虑返回ArraySegment<int>而不是int[]- 这样你最终不会复制数组中的任何值.另一方面,如果更改了原始数组,那些更改将影响调用者看到的内容(同样调用者可以更改数组内容).