如何从C#中的现有数组中获取子数组而不进行复制?

xco*_*r37 6 c# arrays

我的问题类似于从现有数组中获取子数组,尽管在我的情况下,一个不同的概念非常重要 - 我不能使用内存复制.

假设我有X10000个元素的数组,我需要Y包含9000个元素的数组,XX索引500开始.

但是我不想将部分内容复制X到新数组中Y,所以我不想使用Array.Copy,Array.Clone,System.Block.Copy,IEnumerables等.我想Y引用X - Y[0]它实际上是X[500],Y[1]对应X[501],...,Y[9000]X[9500].

因此,例如改变值X[100]将同时改变值Y[600].我怎样才能在C#中实现这一目标?

Dan*_*ite 7

您可以使用以下内容将其包装在另一个对象中:

class View<T>
{
     private T[] _array;
     private long _start;
     private long _length;
     public View(T[] array, long start, long length) { ... }
     public T this[long index] 
     {
         get 
         {
             if (/*do bounds check here*/) 
             {
                 return _array[_start + index];
             }    
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

这不是一个数组,而是一个数组的投影.