【发布时间】:2016-03-12 22:23:21
【问题描述】:
我正在尝试使用 RTTI 获取枚举名称值。
我的目标是使用字符串值从 Enum2(iterator) 中选定的枚举名称值中获取 Enum1(Tsex) 中相应的枚举名称值。
这是我已经实现的代码。我正在使用 Delphi 7。
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs,typinfo;
type
Tsex = (homme,femme);
iterator = (H,F);
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
var
i : integer;
OT: Tsex;
FT: iterator;
begin
i:=0;
OT := Low(Tsex);
for FT := Low(iterator) to High(iterator) do
if GetEnumName(TypeInfo(iterator), Ord(FT)) = 'F' then
begin
showmessage(GetEnumName(TypeInfo(Tsex), Ord(OT)));
end;
i:=i+1;
OT:=Succ(OT);
end;
当我使用H 作为字符串时,我得到homme,但是当我使用F 时,我也得到homme。但它必须是femme。
【问题讨论】:
-
在循环的每次迭代中,调试器告诉您
OT的值是什么? -
我服务的目的是什么?为什么有两种枚举类型?应该只有一个。不要为了拥有短名称和长名称而定义额外的枚举类型。为此使用 const 数组。
-
我认为你可能错过的一点是,当你有一个枚举时,你可以调用枚举名称,就好像它是一个返回枚举值的函数一样,例如OT := TSex(i)。您只需要 FormShow 中的一个变量来执行您现在正在执行的操作。
-
@DavidHeffernan 这只是我得到的一个想法,我需要它来工作(自我挑战),我真正的目标是从数据库中读取我的数据库中只有枚举缩写的字符串( 'E','F') 但在我的表单中,我想在所有枚举或 F 值中获取所有 E 对应值。
-
您提出的解决方案不是前进的方向。你真的不想要枚举名称 F 和 H。太短了。无论您遇到什么问题,这都不是解决方案。
标签: delphi enums delphi-7 rtti