Delphi -> Призма Delphi, как использовать массив записей?
-
19-09-2019 - |
Вопрос
Я изучаю Delphi Prism и не знаю, как написать с его помощью следующий код:
type
TRapportItem = record
Label : String;
Value : Int16;
AnomalieComment : String;
end;
type
TRapportCategorie = record
Label : String;
CategoriesItems : Array of TRapportItem;
end;
type
TRapportContent = record
Categories : array of TRapportCategorie;
end;
Затем где-то я пытаюсь поместить элементы в массив:
rapport.Categories[i].Label:=l.Item(i).InnerText;
Но это не работает..Может ли кто-нибудь просветить меня?
Спасибо!
Решение
- Вы не уточнили, что именно "не сработало".В подобных вопросах следует включать ошибку.
- Массивы являются ссылочными типами и начинаются со значения
nil
.Их необходимо инициализировать, прежде чем к элементам можно будет получить доступ.
Вы можете сделать это с помощью new
оператор:
rapport.Categories = new TRapportCategorie[10]; // 0..9
- Массивы — это довольно низкоуровневый тип.Обычно лучше работать с
List<T>
вместо.
Итак, вы бы заявили:
Categories: List<TRapportCategorie>;
- Но списки также нуждаются в инициализации, используя
new
оператор.Кроме того, изменение возвращаемого значения индексатора в списке, содержащем тип значения, приведет к изменению копии, а не оригинала, что приведет к следующему пункту. - Записи обычно не являются лучшим типом данных для представления данных, поскольку они не являются ссылочными типами;очень легко в конечном итоге изменить копию данных, а не исходные данные.Вместо этого обычно лучше использовать классы, где вы можете поместить весь код инициализации (например, выделение массива или списка) в конструктор.
Не связан с StackOverflow