2010-02-23 3 views
0

У меня есть массив x в размере объектов (от 1 до 100), и я хочу увеличить размер до 101 ... Я изменил размер массива и добавляет объекты, но, к сожалению, (не suprising) добавленные элементы не были инициализированы, я вернусь к использованию цикла while while и добавлению элементов отдельно, но, глядя на код вокруг него, где addrange используется экстенсивно, мне просто интересно, было ли это аккуратным vb .net способ сделать то же самоеДобавление пустых элементов в массив

Bit обучающимся вопроса, просто ищем аккуратные способы сделать то же самое

спасибо заранее

ответ

2

Да, вам нужно зацикливать и добавить новые объекты в новые индексы.

0

Вместо этого используйте вместо этого массив, но вместо List. Они намного проще в использовании и дают больший контроль.

Dim myList As List(Of Whatever) 
myList.Add(New Whatever) 
+0

Согласитесь, однако, используя существующим OBI, где массив передается мне, и добавление к table.Rows colection, поэтому не может изменить методологию. Также ваш ответ дает возможность добавить 47 экземпляров без выполнения цикла do – spacemonkeys

+0

Приветствия :-) – spacemonkeys

0

Вы ищете это ....

ReDim СОХРАНИТЬ thatArray (to_the_new_size)

Заповедник должен, ммм, сохранять исходные значения в своих первоначальных местах.

+0

Неверный конец, проблема в том, что новые элементы добавлены (массив объектов), когда вы переходите от 10 элементов к 15, пункты 10-15 не были инициализированы оператором NEW. Также способ VB.Net для этого выше (который я использую) - array.resize (Array, новый размер), который не разрушает содержимое массива до новый размер – spacemonkeys

0

Я (тогда) не уверен, что вы хотите выполнить ... с использованием ReDim Preserve (старше) или .reSize (новее), безусловно, добавит к «концу» массива, и эти элементы ДОЛЖНЫ БЫТЬ null, поскольку вы не можете передавать новые элементы в конструктор.

Но это то, что вы ищете? Способ передачи новых значений в конструктор новых элементов, чтобы он возвращался со старыми значениями, как и новые?

Даже если вы перегружать конструктор, вам придется LOOP новых значений. (Насколько я могу видеть.)

+0

Привет, Tobrien, да, это был вопрос. Единственная причина, по которой я задал этот вопрос, была не интересна, я использовал table.rows.addrange (array.convertall (массив, функция делегата, которая преобразует все элементы в строки таблицы))), которые преобразовали массив в строки таблицы .. тогда я должен был повторить до максимального количества, добавляя строки, которые после первого утверждения казались немного длинными, поэтому я задал вопрос из интереса, как я сказал в вопросе, который я достиг, чего бы я хотел, просто искал альтернативные пути сделать это – spacemonkeys

+0

В старые добрые времена то, что вы в конечном итоге сделали, это захват (т.е. перегрузка) конструктора, а затем использование вызова Windows USER.dll для перемещения памяти или некоторых таких (то есть на уровне кода сборки) для заполнения новые записи быстро. Как и большинство любимых/ненавистных функций DECLARE, они обеспечивали скорость при необходимости. tob – tobrien

Смежные вопросы