创建具有不同长度的数组的新引用

时间:2013-10-05 03:34:57

标签: c# arrays

给出一些数组:

int[] array = new int[8000];

是否可以引用一个新的数组:

int[] array2 = Array.SameReferenceDifferentLength(array, 4000);
// array1.Length == 8000;
// array2.Length == 4000;
// &array2[0] == &array[0];

1 个答案:

答案 0 :(得分:4)

使用ArraySegment结构:

var a = new string[] { "a", "b", "c", "d", "e" };

var b = new ArraySegment<string>(a, 1, 3);

foreach (var s in b)
{
    Console.WriteLine(s);
}

这会对指定的数组范围进行浅层引用。也就是说,它不会复制数组数据。

如果要索引ArraySegment<T>,可以将其转换为IList<T>,然后使用该接口提供的索引器。


模仿你问题中的代码:

int array = new int[8000];
var array2 = new ArraySegment<int>(array, 0, 4000);
//array.Length == 8000
//array2.Count == 4000
//array == array2.Array