Инициализация массива на произвольном начальном значении индекса в c#

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
6
задан warren 2 April 2009 в 15:07
поделиться

8 ответов

Можно использовать Array.CreateInstance.

Посмотрите типы массива в.NET

8
ответ дан 8 December 2019 в 04:11
поделиться

Возможно сделать, как Вы запрашиваете, см. код ниже.

// Construct an array containing ints that has a length of 10 and a lower bound of 1
Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 });

// insert 1 into position 1
lowerBoundArray.SetValue(1, 1);

//insert 2 into position 2
lowerBoundArray.SetValue(2, 2);

// IndexOutOfRangeException the lower bound of the array 
// is 1 and we are attempting to write into 0
lowerBoundArray.SetValue(1, 0);
18
ответ дан 8 December 2019 в 04:11
поделиться

Не просто. Но можно, конечно, записать собственный класс. Это имело бы массив как частную переменную, и пользователь будет думать, что его массив запускается в 1, но действительно это запускается в нуле, и Вы вычитаете 1 изо всех его доступов к массиву.

1
ответ дан 8 December 2019 в 04:11
поделиться

Можно записать собственный класс массива

0
ответ дан 8 December 2019 в 04:11
поделиться

Я не думаю, возможно ли изменить начальное значение индекса массивов.

Я создал бы свой собственный массив с помощью дженериков и обработал бы его внутри.

0
ответ дан 8 December 2019 в 04:11
поделиться

Я не думаю, что можно создать ненулевые основанные массивы в C#, но Вы могли легко записать собственный класс обертки вокруг созданного в структурах данных. Этот класс обертки содержал бы частный экземпляр типа массива, которого Вы потребовали; при перегрузке [] не позволяется оператор индексирования, но можно добавить индексатор к классу, чтобы заставить его вести себя как индексируемый массив, видеть здесь. Индексная функция, которую Вы пишете, могла затем добавить (или вычесть), 1, ко всему индексу передал в.

Вы могли затем использовать свой объект следующим образом, и он будет вести себя правильно:

myArrayObject[1]; //would return the zeroth element.
0
ответ дан 8 December 2019 в 04:11
поделиться

Просто сохраните названного 'смещения' интервала константы со значением одного и всегда добавляйте это к своим нижним индексам в Вашем коде.

0
ответ дан 8 December 2019 в 04:11
поделиться

В VB6 Вы могли изменить массив для запуска с 0 или 1, таким образом, я думаю, что VBScript может сделать то же. Для C# это не возможно, но можно просто добавить Нулевое значение в первом [0] и запустить действительное значение в [1]. Конечно, это немного опасно...

-1
ответ дан 8 December 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: