如何从arraylist中检索包含多维数组的多维类元素

时间:2009-09-30 11:27:32

标签: delphi arraylist tobject

我目前正在使用Vista下的CodeGear Delphi 2007。 我的应用程序在一些相当繁重的计算中返回内存不足错误。 .exe文件从150 Mb增长到惊人的2 Gb(!LOL)

关于这个问题:

1)我正在将一些数组改为arraylist       但它给了我一些相当难以解决的问题(见下面的示例)

2)建议使用多维结构并且要求代码中的细微变化是最受欢迎的!

现在处理会员的旧方式是:

function TResults.GetTriangleA(ComNr, triangleA, PtNr : integer) : single;
  Begin
  try
    result := ListTriangleRes[TriangleA - 1].GetA(ComNr, PtNr);

还有TriangleResult类:

TTriangleRes = class(TResults)
private
IndexPoint1, IndexPoint2, Indexpoint3 : integer; 
MyA : array of array [1..3] of single;  
MyB : array of array [1..3] of single; 

在这里,我正在尝试使用新的arraylist,但直到现在还不是很成功

function TResults.GetTriangleVz(ComNr, triangleA, PtNr : integer) : single;
Var
  MyTriangleRes:    TTriangleRes;
  MyObj:            Tobject;
begin
  MyTriangleRes:=  TTriangleRes.Create ;
  try
    MyObj := ListTriangleRes[TriangleA - 1] ;
    result := MyObj <<<<?????? how to>>>>MyTriangleRes.GetVz(ComNr, PtNr);

Mkr

爱德华

2 个答案:

答案 0 :(得分:1)

据我所知,ArrayList是一个未在Delphi中使用的Java / C#集合。我们的等价物称为TObjectList。 (或者TList,但是如果你正在使用对象,最好使用TObjectList。)那是你正在使用的吗?我猜你是。

看起来您的问题在于对象类型。有两种方法可以从具有正确类型的列表中获取对象。您可以使用普通列表并对其进行类型转换,或者如果您有D2009或D2010,则可以使用通用列表。

第一种方法,使用TObjectList:

MyTriangleRes := ListTriangleRes[TriangleA - 1] as TTriangleRes; //type-safe cast

第二种方式:将ListTriangleRes声明为TObjectList<TTriangleRes>,并将Generics.Collections添加到使用子句中。这使您在编译时而不是运行时类型安全,因为编译器将确保只有TTriangleRes对象进入和退出列表。

无论哪种方式,都不需要中间的TObject变量。

答案 1 :(得分:0)

我不确定你要做什么,但你的上一个代码不应该是MyTriangleRes:= ListTriangleRes [TriangleA-1],然后结果:= MyTriangleRes.GetVz(ComNr,PtNr)?