Delphi -> Delphi prism,如何使用记录数组?

Posted

技术标签:

【中文标题】Delphi -> Delphi prism,如何使用记录数组?【英文标题】:Delphi -> Delphi prism, how to use array of records? 【发布时间】:2009-10-04 07:27:13 【问题描述】:

我正在学习 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;

但它不起作用..有人可以启发我吗?

谢谢!

【问题讨论】:

你能展示你声明和初始化变量'rapport'的代码吗? 我只添加了 'rapport : TRapportContent;'到接口的受保护部分。我错过了什么?我还尝试将 CategoriesItems 声明为 TRapportItem 的 Array [0..64];但我有同样的问题。感谢您这么快回复! 我发现了我昨天做的另一个测试:使用 'regular' delphi 我可以编写 setlength(rapport.Categories,10);将我的数组声明为动态数组时,但我找不到如何使用 prism 编写相同的数组。 【参考方案1】: 您没有具体说明什么“不起作用”。您应该在此类问题中包含错误。 数组是引用类型,它们以值nil 开头。需要先对它们进行初始化,然后才能访问元素。

您可以使用new 运算符来做到这一点:

rapport.Categories = new TRapportCategorie[10]; // 0..9
数组是相当低级的类型。通常最好改用List<T>

所以你要声明:

Categories: List<TRapportCategorie>;
但是列表也需要初始化,使用new 操作符。此外,在包含值类型的列表上修改索引器的返回值将修改副本,而不是原始值,这会导致下一点。 记录通常不是表示数据的最佳数据类型,因为它们不是引用类型;很容易最终修改数据的副本,而不是原始数据。通常最好使用类来代替,您可以将所有初始化代码(例如分配数组或列表)放在构造函数中。

【讨论】:

谢谢!我切换到使用列表,它现在可以工作了! rapport.Categories:= 新列表;计划使用某种类,因为此代码必须由两个不同的应用程序使用,但我希望在这里进行某种快速原型设计。谢谢! +1 使用 List 或 Dictionary 并将键作为类别名称。

以上是关于Delphi -> Delphi prism,如何使用记录数组?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi Prism 中的操作系统指令

delphi10和delphi2010区别

delphi编程

如何安装Delphi5

通过delphi执行DOS??

delphi 2010 编译乱码问题