ArrayList и разницу массив


Со ссылкой на MSDN, утверждается, что "Вы можете установить нижнюю границу массива, но нижняя граница ArrayList всегда равна нулю"

Если я объявляю массив a[10], нижняя граница всегда будет a[0].

Это нижняя граница, указанная там? Если да, то как мы можем установить нижнюю границу массива, так как индекс массива всегда начинается с[0].

Или нижняя граница, указанная в ссылке, является чем-то другим?

Примечание: Я знаю, что ссылка указывает на содержание .NET Framework 1.1 , но все же любопытно узнать, что именно они упомянули.

2 2

2 ответа:

Вы можете создать массив с ненулевой нижней границей, используя Array.CreateInstance.

Обратите внимание, что вы не сможете привести его к Foo[] (где Foo - соответствующий тип), если вы также не сделаете его многомерным. Существует два типа массива внутри CLR-вектор (основанный на нуле, одномерный) и массив (может быть многомерным и иметь ненулевую нижнюю границу).

A T[] В C# всегда соответствует вектору, тогда как a 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 просто отлично.

Лично я бы избегал использования ненулевых нижних ограниченных массивов, как чума. Они медлительны, и работать с ними больно.

Нижняя граница в C# и VB.NET всегда находится на 0. Visual Basic 6.0 и более поздние версии допускали переменные нижние границы. Они удалили его для переписывания языка для. NET.

Вот статья, которая подробно описывает, как это сделать: http://msdn.microsoft.com/en-us/magazine/cc301755.aspx ищите "создание массивов с ненулевой нижней границей"