Вопрос

Я изучаю 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 оператор.Кроме того, изменение возвращаемого значения индексатора в списке, содержащем тип значения, приведет к изменению копии, а не оригинала, что приведет к следующему пункту.
  • Записи обычно не являются лучшим типом данных для представления данных, поскольку они не являются ссылочными типами;очень легко в конечном итоге изменить копию данных, а не исходные данные.Вместо этого обычно лучше использовать классы, где вы можете поместить весь код инициализации (например, выделение массива или списка) в конструктор.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top