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:= 新列表以上是关于Delphi -> Delphi prism,如何使用记录数组?的主要内容,如果未能解决你的问题,请参考以下文章