用于存储枚举的列表类?

ele*_*tor 8 delphi enums list delphi-2007

我应该用什么列表类型来存储枚举值?我已尝试使用TObjectList,我强制转换为TObject以添加值,但在从列表中读取时无法将其强制转换为枚举.

你用什么列表来存储枚举?

Cos*_*und 6

将枚举转换为PointerTObject返回的工作正常.如果您的Delphi版本支持泛型使用Tim的建议,那就更好了.或者,您可以使用动态数组(array of TTestEnum)或围绕动态数组创建包装类 - 这就是在具有泛型的Delphi版本中实现泛型列表的方式.

这是一个快速的控制台演示,使用TList,而不是TObjectList因为TList对它所拥有的项目做出更少的假设.

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils, Classes;

type TTestEnum = (enum1, enum2, enum3, enum4);

var L: TList;
    i: Integer;
    E: TTestEnum;

begin
  L := TList.Create;
  try
    L.Add(Pointer(enum1));
    L.Add(Pointer(enum2));
    L.Add(Pointer(enum3));
    L.Add(Pointer(enum4));
    for i:=0 to L.Count-1 do
    begin
      E := TTestEnum(L[i]);
      case E of
        enum1: WriteLn('enum1');
        enum2: WriteLn('enum2');
        enum3: WriteLn('enum3');
        enum4: WriteLn('enum4');
      end;
    end;
  finally L.Free;
  end;
  ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)


Tim*_*zer 5

你能不能只使用泛型?

TList<TEnumName>;
Run Code Online (Sandbox Code Playgroud)

  • 不在Delphi 2007中(如标签中所述). (3认同)