могу ли я создать длинный список таким образом, чтобы индекс был длинным?

#c#

#c#

Вопрос:

в настоящее время индекс a List<int> может принимать значение Int32, могу ли я использовать Int64?

Поэтому я могу использовать что-то вроде mylist[1000000000000] .

Ответ №1:

Нет, вы не можете.

Это было бы бесполезно, если бы это было разрешено. Среда CLR имеет ограничение на максимальный размер объекта в 2 ГБ. Следовательно, даже невозможно создать массив, в котором long индекс был бы полезен.

Комментарии:

1. Я считаю, что Mono использует 64-битные целые числа для индексов массива. Однако я не уверен, означает ли это, что их реализация List<> отличается.

2. Список может использовать другую стратегию для хранения своих элементов. Например, он может использовать какую-то древовидную структуру.

Ответ №2:

Вы не можете изменить интерфейс framework List<> , который определяет тип аргумента index как int . Но вы могли бы создать свой собственный тип, который принимает long индекс.

Как отметил JaredPar , вы не можете создать массив, достаточно большой, чтобы требовать 64-битный индекс. Если вы хотите создать список, в котором может храниться так много элементов, вам придется использовать какую-то древовидную структуру, или массивы массивов, или что-то в этом роде. И вам понадобится много памяти!

Ответ №3:

У вас может быть список, который будет содержать длинные значения или числа, превышающие 2 147 483 647.

 List<long> list = new List<long>();

list.Add(3000000000) will work.
 

Комментарии:

1. автор имел в виду коллекцию с длинным (int64) индексом, а не коллекцию long с индексом int32