Delphi:如何使用 TObjectList<T>?

标签 delphi generics tobjectlist

我需要了解如何使用通用 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;

在这里,TList1TList2继承相同的构造函数constructor TParent.Create(Key: string; Value: string); .但是,由于不同的特化(例如不同的私有(private)字段),它们不会属于同一类型。所以我必须写两个几乎相同的填充方法:
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);相同,除了替换 TList1TList2自始至终。据我了解,这可以通过使用 TObjectList 巧妙地规避。和单一的填充方法;但是,我不知道该怎么做。有人对此有一些好的建议吗?谢谢!

最佳答案

您无法使用泛型列表将其压缩,因为泛型的类型是类定义的一部分。所以一个TObjectList<TMyClass1>TObjectList<TMyClass2> 不同(且不兼容) .与普通 TList/TObjectList 相比,使用泛型列表的主要好处是提高了类型安全性,减少了类型转换和更简洁的代码。

此外,如果您使用键/值对,您是否将它们放入列表中,然后通过搜索键并返回关联值来检索它们?如果是这样,请查看 Generics.Collections 中的 TDictionary。这是一个通用的键/值哈希表,它将为您大大简化此过程。

关于Delphi:如何使用 TObjectList<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660698/

相关文章:

delphi - 开发者该如何应对如此多的GUI配置组合呢?

java - 泛型和 Java : how does "extends" work?

swift - 无法从通用结构调用通用函数

generics - 如何在 kotlin 中使用泛型编写 lambda?

delphi - 如何在没有冗余列表的情况下迭代父/子层次结构中的对象?

delphi - 如何通过DataSnap发送/接收TObjectList解决内存泄漏?

delphi - 为什么我的 D2009 exe 会生成带有名为 ATTnnnnn.DAT 的附件的电子邮件

windows - 如何让我的程序在特定文件夹中搜索依赖项?

Delphi:如果用户按下序列太快,则无法捕获 Ctrl+C

class - 如何在类中创建类的属性?