我如何获得 Delphi 记录,其中有TArray,相同的记录类型,以克隆整个数组到一个新的示例?

7kqas0il  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(185)

有了它,就可以创建深度不确定的分支结构

TGItem = record
  NameShort:            String;
  NameLong:             String;
  Formula:              String;
  Components:           TArray<TGItem>;
  procedure Init;
end;

var 
 A,B: TGItem;

 B := A;

A和B中的.组件指向同一个数组,但我想复制这个数组,我该怎么做?
版本10.4
编辑/当前进度:

class operator Assign(var Dest: TGItem; const [ref] Src: TGItem);

以及

class operator TGItem.Assign(var Dest: TGItem; const [ref] Src:TGItem);
begin
  // What to put here?
end;
rpppsulh

rpppsulh1#

function TGItem.Clone: TGItem;
begin
  Result.Init;    
  Result.NameShort        := Self.NameShort;
  Result.NameLong         := Self.NameLong;
  Result.Formula          := Self.Formula;
  Setlength(Result.Components, Length(Self.Components));
    
  var I: Integer;
  for I := 0 to Length(Result.Components)-1 do
  begin
    Result.Components[I] := Self.Components[I].Clone;
  end;    
end;

看起来很有效,我使用B := A.Clone而不是B := A,它进行递归复制并创建一个新的克隆分支结构(而不是指向旧结构)。

相关问题