delphi - 存储枚举的列表类?

标签 delphi list enums delphi-2007

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

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

最佳答案

将枚举转换为 PointerTObject 并返回效果很好。如果您的 Delphi 版本支持泛型,请使用 Tim 的建议,效果会更好。或者,您可以使用动态数组(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.

关于delphi - 存储枚举的列表类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894569/

相关文章:

java - 如何通过属性获取枚举类型?

java - 为什么我收到错误 "variable ' 颜色可能尚未初始化? java

delphi - 主详细信息中的 TClientDataset 未关闭详细信息查询

delphi - 在 "Poodle"更改后让 Indy 调用与 Paypal IPN 一起工作

安卓10,唤醒

list - 索引多列并匹配不同的值,返回跨列的唯一值列表

c# - 在 C# 单元测试中比较两个 List<string[]> 对象

mysql - "Lost connection to MySQL server during query"杀死 Windows 服务

string - 如何从数字列表中获取字符串?

groovy - 在 Groovy 脚本中导入内部枚举