C#数组切片没有副本

use*_*716 8 c# arrays performance slice space-efficiency

我想将一个C#数组的子集传递给一个方法.我不在乎该方法是否覆盖数据,因此希望避免创建副本.

有没有办法做到这一点?

谢谢.

SLa*_*aks 15

更改方法以采取IEnumerable<T>ArraySegment<T>.

然后你可以通过 new ArraySegment<T>(array, 5, 2)

  • @StefanStinegger:`ArraySegment&lt;T&gt;` 实现了 `IEnumerable&lt;T&gt;` (2认同)

uyg*_*ran 5

在 C# 7.2 中,我们有Span<T>. 您可以AsSpan<T>为数组使用扩展方法并将其传递给该方法,而无需复制切片部分。例如:

Method( array.AsSpan().Slice(1,3) )
Run Code Online (Sandbox Code Playgroud)