如何声明和使用通用记录的通用TList

A L*_*rdo 3 delphi generics delphi-xe2

我想声明一个通用记录类型,如

TMyGenericRecord<T, T1> = record
   X: <T>;
   Y: <T1>;
end;
Run Code Online (Sandbox Code Playgroud)

然后我想声明TMyGenericRecord的TList但似乎无法获得正确的语法.

TMyGenericList = TList<TMyGenericRecord<T, T1>>???
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

Dav*_*nan 8

我想你想这样写:

type
  TMyGenericRecord<T1, T2> = record
    X: T1;
    Y: T2;
  end;

  TMyGenericList<T1, T2> = class(TList<TMyGenericRecord<T1, T2>>);
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样实例化类型,例如:

var
  List: TMyGenericList<Integer, string>;
Run Code Online (Sandbox Code Playgroud)

然后,您可以声明与此列表兼容的记录,如下所示:

var
  Rec: TMyGenericRecord<Integer, string>;
Run Code Online (Sandbox Code Playgroud)

在这一点上

List.Add(Rec);
Run Code Online (Sandbox Code Playgroud)

将编译.虽然显然你需要构建一个列表实例.

  • 我认为另一种说法是不允许使用泛型类型别名. (2认同)