ArrayList и разницу массив
Со ссылкой на MSDN, утверждается, что "Вы можете установить нижнюю границу массива, но нижняя граница ArrayList всегда равна нулю"
Если я объявляю массив a[10], нижняя граница всегда будет a[0].
Это нижняя граница, указанная там? Если да, то как мы можем установить нижнюю границу массива, так как индекс массива всегда начинается с[0].
Или нижняя граница, указанная в ссылке, является чем-то другим?
Примечание: Я знаю, что ссылка указывает на содержание .NET Framework 1.1 , но все же любопытно узнать, что именно они упомянули.
2 ответа:
Вы можете создать массив с ненулевой нижней границей, используя
Обратите внимание, что вы не сможете привести его кArray.CreateInstance
.Foo[]
(гдеFoo
- соответствующий тип), если вы также не сделаете его многомерным. Существует два типа массива внутри CLR-вектор (основанный на нуле, одномерный) и массив (может быть многомерным и иметь ненулевую нижнюю границу).A
T[]
В C# всегда соответствует вектору, тогда как aT[][]
соответствует массив. Так что вы можете сделать: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
просто отлично.Лично я бы избегал использования ненулевых нижних ограниченных массивов, как чума. Они медлительны, и работать с ними больно.
Нижняя граница в C# и VB.NET всегда находится на
0
. Visual Basic 6.0 и более поздние версии допускали переменные нижние границы. Они удалили его для переписывания языка для. NET.Вот статья, которая подробно описывает, как это сделать: http://msdn.microsoft.com/en-us/magazine/cc301755.aspx ищите "создание массивов с ненулевой нижней границей"