【发布时间】:2009-11-03 01:42:43
【问题描述】:
我需要了解如何使用通用的 Delphi 2009 TObjectList。我的非TObjectList 尝试看起来像
TSomeClass = class(TObject)
private
FList1: Array of TList1;
FList2: Array of TList2;
public
procedure FillArray(var List: Array of TList1; Source: TSource); Overload;
procedure FillArray(var List: Array of TList2; Source: TSource); Overload;
end;
这里,TList1 和 TList2 继承了相同的构造函数 constructor TParent.Create(Key: string; Value: string);。但是,由于不同的专业化(例如不同的私有字段),它们不会属于同一类型。所以我必须写两个几乎相同的填充方法:
procedure TSomeClass.FillArray(var List: Array of TList1; Source: TSource);
begin
for i := 0 to Source.List1.Count - 1 do begin
SetLength(List, Length(List) + 1);
List[i] := TList1.Create(Source.List1[i].Key, Source.List1[i].Value);
end;
end;
与FillArray(List: Array of TList2; Source: TSource); 相同,除了将TList1 替换为TList2。据我了解,这可以通过使用TObjectList 和单一填充方法巧妙地规避;但是,我不知道该怎么做。有人对此有一些好的建议吗?谢谢!
【问题讨论】:
-
1. TClass 是一个非常糟糕的类名选择 2. List 在 FillChar 中没有声明为 var
-
3.设置长度(列表,长度(列表));实际上什么都不做
-
Uwe:是的,这是一个非常糟糕的名字。编辑了这个和其他建议。 :)
标签: delphi generics tobjectlist