Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
WoodHead
102 / 101 / 29
Регистрация: 15.01.2011
Сообщений: 468
#1

Копирование коллекции - Delphi

17.01.2016, 21:04. Просмотров 213. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Не могу понять, есть ли возможность скопировать данные из одной коллекции в другую встроенными методами.
Вот что написано в книге "Delphi. Полное руководство" под авторством Сухарева:
... в коллекциях реализован метод Assign, заявленный в TPersistent и позволяющий легко копировать содержание одной коллекции в другую, причём на основе объектов, хранимых в копируемой коллекции, будут автоматически созданы объекты, предназначенные для хранения в результирующей коллекции, полностью идентичные исходным.
Допустим, я создам класс - наследник класса TCollectionItem, экземпляры которого будут храниться в коллекции:
Delphi
1
2
3
4
TCollItem = class(TCollectionItem)
  public
    Name: String;
  end;
Затем попробую создать две коллекции, и сделать копию созданной коллекции:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.FormShow(Sender: TObject);
var
  Collect1, Collect2: TCollection;
begin
  Collect1:=TCollection.Create(TCollItem);
  Collect1.Add;
  (Collect1.Items[0] as TCollItem).Name:='Ольга';
  Collect2:=TCollection.Create(TCollItem);
  Collect2.Assign(Collect1);
end;
На строке
Delphi
1
Collect2.Assign(Collect1);
получаю ошибку
Project Project1.exe raised exception class EConvertError with message 'Cannot assign a TCollItem to a TCollItem'.
Собственно, в чём ошибка и как сделать правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2016, 21:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Копирование коллекции (Delphi):

Коллекции ошибка
Не работает коллекция (возникает ошибка при добавлении Add) unit DrmU; ...

Не считывает из коллекции!
Смотрите, есть класс коллекции CCompany unit Company; interface Uses ...

Коллекции Delphi TList
Ошибка в коде ... TObject = class ... end; ...

Получить из коллекции элемент по номеру
Привет! Вот функция которая из Коллекции должна вытаскивать мне нужный объект...

Моделирование каталога коллекции произведений искусства (ООП)
помогите пожайлуста написать прграмму: Объектно-ориентированное моделирование...

Копирование
я копирую файл при помощи CopyFile. Мне нужно сделать чтобы программа-проект...

3
Kitayets
334 / 288 / 102
Регистрация: 09.09.2011
Сообщений: 1,013
18.01.2016, 13:07 #2
в TCollItem переопределить метод Assign, т.к. в TCollectionItem он не определяется, а в TPersistent - поведение по умолчанию указанная вами ошибка.

TCollection.Assign никакой магии не делает, а создает энное количество TCollectionItem (или потомка) и вызывает Assign для каждого из них
1
WoodHead
102 / 101 / 29
Регистрация: 15.01.2011
Сообщений: 468
18.01.2016, 14:02  [ТС] #3
Kitayets, правильно ли сделать в данном случае следующее?
Delphi
1
2
3
4
5
TCollItem = class(TCollectionItem)
  public
    Name: String;
    procedure Assign(Source: TPersistent); override;
  end;
Delphi
1
2
3
4
procedure TCollItem.Assign(Source: TPersistent);
begin
  Name:=(Source as TCollItem).Name;
end;
В этом случае ошибки нет и в Collect2 добавляется объект. Но не упускаю ли я чего?
0
Kitayets
334 / 288 / 102
Регистрация: 09.09.2011
Сообщений: 1,013
18.01.2016, 21:51 #4
все верно.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2016, 21:51
Привет! Вот еще темы с решениями:

Копирование
Хочу скопировать файл но компилятор Delphi 7 выдаёт ошибку два раза - Too...

Копирование
Здравствуйте у меня такой вопрос на форме у меня есть ComboBox1 и Edit1 в...

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

Копирование файла
Срочно нужна помощь, мне для кнопки нужна команда которая копирует папку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru