鉴于一些阵列:创建新的引用数组不同长度
int[] array = new int[8000];
是否有可能是指一个新的阵列,使得:
int[] array2 = Array.SameReferenceDifferentLength(array, 4000);
// array1.Length == 8000;
// array2.Length == 4000;
// &array2[0] == &array[0];
鉴于一些阵列:创建新的引用数组不同长度
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
虽然,不完全是我所寻找的(我真的希望有一个类型为'int [];''ArraySegment
@ Imisnew2这就是'ArraySegment
你就不能进入循环的第一个拿到新的吗? – Tico
简短的回答是“不”,但你总是可以通过包装一个数组并维护自己的“长度”来对其进行仿真,这个长度对于同一个数组的不同包装而言是不同的。 – Cameron
@Cameron这不是真的。 .NET的'ArraySegment'结构恰好是OP的场景。 –