Delphi -> Delphi Prism, как использовать массив записей? - PullRequest
0 голосов
/ 04 октября 2009

Я изучаю 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;

Но это не работает .. Может кто-нибудь меня просветить?

Спасибо!

1 Ответ

5 голосов
/ 04 октября 2009
  • Вы не указали, что именно "не сработало". Вы должны включить ошибку в такие вопросы.
  • Массивы являются ссылочными типами, и они начинаются со значения nil. Они должны быть инициализированы, прежде чем элементы будут доступны.

Вы можете сделать это с помощью оператора new:

rapport.Categories = new TRapportCategorie[10]; // 0..9
  • Массивы довольно низкого уровня. Обычно лучше работать с List<T>.

Итак, вы бы заявили:

Categories: List<TRapportCategorie>;
  • Но списки также нужно инициализировать, используя оператор new. Кроме того, изменение возвращаемого значения индексатора в списке, содержащем тип значения, приведет к изменению копии, а не оригинала, что приведет к следующему пункту.
  • Записи обычно не лучший тип данных для представления данных, поскольку они не являются ссылочными типами; в конечном итоге очень легко изменить копию данных, а не исходные данные. Вместо этого обычно лучше использовать классы, где вы можете поместить весь код инициализации (например, выделение массива или списка) в конструктор.
...