您可以使用记录助手来完成此任务,该助手适用于从 XE3 开始的值类型。例如:
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.TypInfo;
type
TMyEnum = (enumValue1, enumValue2);
TMyEnumHelper = record helper for TMyEnum
public
function ToString: string;
end;
function TMyEnumHelper.ToString: string;
begin
Result := GetEnumName(TypeInfo(TMyEnum), ord(Self));
end;
begin
Writeln(enumValue1.ToString);
Writeln(enumValue2.ToString);
end.
该程序输出以下内容:
enumValue1
enumValue2
当然你可能更喜欢这样做:
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.TypInfo;
type
TMyEnum = (enumValue1, enumValue2);
TMyEnumHelper = record helper for TMyEnum
private
const
EnumNames: array [TMyEnum] of string = ('Friendly name 1', 'Friendly name 2');
public
function ToString: string;
end;
function TMyEnumHelper.ToString: string;
begin
Result := EnumNames[Self];
end;
begin
Writeln(enumValue1.ToString);
Writeln(enumValue2.ToString);
end.
这里的输出是:
Friendly name 1
Friendly name 2
这可能会让您解决 Delphi 枚举类型不支持 Java 中可用的文本命名这一事实。
另一种方法,构造函数HTTPHeaderKey
枚举类型不支持。原因是它需要状态,而 Delphi 枚举类型的唯一状态是枚举类型值本身。您不能像 Java 代码中那样移植额外的实例变量。
考虑到所有因素,我认为尝试使用枚举类型进行直译是行不通的。我建议您使用记录或类进行翻译,并使用可用的 Delphi 语言结构构建等效的功能。