Вы можете создать массив с ненулевым нижним пределом, используя Array.CreateInstance
.
Обратите внимание, что вы не сможете привести его к Foo[]
(где Foo
- соответствующий тип), если вы не сделаете его многомерным.Внутри CLR есть два типа массивов: vector (основанный на нуле, одномерный) и массив (может быть многомерным и иметь ненулевую нижнюю границу).
A T[]
в C # всегда соответствует вектору, тогда как T[][]
соответствует массиву.Таким образом, вы можете сделать:
int[][] rectangle = (int[][]) Array.CreateInstance(typeof(int),
new int[]{2, 2}, // lengths
new int[]{-1, -1}); // lower bounds
, но это не удастся:
int[] rectangle = (int[]) Array.CreateInstance(typeof(int),
new int[]{2}, // length
new int[]{-1}); // lower bound
Аналогично, вы не можете привести его к IEnumerable<int>
или IList<int>
- хотя вы можете перебирать егос IEnumerable
просто отлично.
Лично я бы не использовал ненулевые ограниченные снизу массивы, такие как чума.С ними медленно и больно работать.