ArrayList и Array разница - PullRequest
       6

ArrayList и Array разница

2 голосов
/ 19 января 2010

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 19 января 2010

Вы можете создать массив с ненулевым нижним пределом, используя 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 просто отлично.

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

3 голосов
/ 19 января 2010

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

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

...