[英]How to retrieve multidimensional a class element containing multidimensional arrays from an arraylist
我目前正在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);
k
愛德華
據我所知,ArrayList是一個Java / C#集合,在Delphi中沒有使用。 我們的等效項稱為TObjectList。 (或者TList,但是如果要使用對象,最好使用TObjectList。)那是您使用的嗎? 我假設你是。
看來您的問題出在對象類型上。 有兩種方法可以從類型正確的列表中刪除對象。 您可以使用常規列表並進行類型轉換,或者如果您具有D2009或D2010,則可以使用常規列表。
第一種方法,使用TObjectList:
MyTriangleRes := ListTriangleRes[TriangleA - 1] as TTriangleRes; //type-safe cast
方式二:聲明ListTriangleRes作為TObjectList<TTriangleRes>
並添加Generics.Collections到您的使用條款。 這使您在編譯時(而不是運行時)具有類型安全性,因為編譯器將確保僅TTriangleRes對象進入和退出列表。
無論哪種方式,都不需要中間的TObject變量。
我不確定自己要做什么,但是您的最后一個代碼不應該是MyTriangleRes:= ListTriangleRes [TriangleA-1],然后是Result:= MyTriangleRes.GetVz(ComNr,PtNr)嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.