Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как увеличить размер массива, не удаляя его элемен


Автор: neutrino 19.10.2003, 12:57
Приветствую!

Вот че за хрень?! Раньше в С была такая функция Realloc(), которая копировала старые элементы в новый массив. А что делать с этим GC confused.gif
Единственное что нашел - это класс, который работает с кучей. Но хотелось бы чего-нибудь под .NET. Язык - С#.

Спасибо.

Автор: neutrino 19.10.2003, 16:11
Скорее вопрос не в том, чтобы создать новый массив и переписать в него элементы из старого, а в том как просто добавить сроку к массиву строк в том же TextBox. Как в Delphi было:

Memo1.Lines.Add("Like this!");

Автор: stab 20.10.2003, 10:47
Код

using System.Collections;

...

ArrayList list = new ArrayList();
list.Add("string");
Text = (string) list[0]; // проблема, надо приводить типы

Автор: stab 20.10.2003, 10:50
если надо именно строки, то System.Collections.Specialized.StringCollection

Автор: neutrino 20.10.2003, 15:01
Ни первый вариант ни второй не пошел.
Проблема все таки в том, что я не могу задать для массива строк значения. В саму коллекцию (и простую и строк) все записывается. Но в массив строк - нет. Даже, если я делаю typecast. Может быть надо как-то память выделять? Вот код:

Цитата

  protected void TranslateToProgramm()
  {
   int Idx=0;
   Code=new StringCollection();
   ParseBranch(StartBlock, 1);
   CodeEditor.Lines=new string[Code.Count];
   foreach (string S in Code)
   {
    CodeEditor.Lines[Idx++]=(string)S;
   }
   //Code.CopyTo(0, CodeEditor.Lines, 0, Code.Count);
  }


Автор: neutrino 20.10.2003, 15:02
И зачем делать приведение типов, когда переменная S все равно типа string?

Автор: neutrino 20.10.2003, 15:09
Такое ощущение, что не туда ответ написал. Извиняюсь. Я думаю, лучше обсуждение вести в соседней теме - http://forum.vingrad.ru/index.php?act=ST&f=47&t=13672&st=0#entry89290.

Автор: stab 20.10.2003, 15:15
Цитата
И зачем делать приведение типов, когда переменная S все равно типа string?

Я говорил про ArrayList.

Автор: altarasjuk 22.10.2003, 20:44
Есля я правильно понял суть вопроса, то никак (во всяком случае с массивами такое не должно прокатить). Есть только один вариант:
1. Создаём массив на 1 эл-т.
2. Добавляем эл-ты пока не закончится "место" в массиве
3. Создаём новый массив длиной в <длина старого>*2
4. Идём к п. 2.

И кстати, по поводу коллекций:
Так уж сложилось, что типизированные коллекции появятся в новой джаве, а остальным - придётся подождать. Так что я бы на твоём месте мирился с тем, что надо приводить типы smile.gif

Автор: stab 23.10.2003, 13:57
а в следующей версии C# появятся шаблоны, типа STL, и то ж можно будет делать типизированные коллекции. smile.gif ждемс

Автор: neutrino 23.10.2003, 14:08
А когда она будет?

Автор: stab 23.10.2003, 17:01
хз, где-то 2004-2005 год

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)