创建对不同长度数组的新引用
本文关键字:新引用 引用 数组 创建 | 更新日期: 2023-09-27 18:34:11
给定一些数组:
int[] array = new int[8000];
是否可以引用一个新数组,例如:
int[] array2 = Array.SameReferenceDifferentLength(array, 4000);
// array1.Length == 8000;
// array2.Length == 4000;
// &array2[0] == &array[0];
使用 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