我遇到了RTTi的一些问题..我想枚举记录类型
中的所有常量值 type TMyRecord = record
const
value1: Integer=10;
value2: Integer=13;
value3: Integer=18;
value4: Integer=22;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
ctx:TRttiContext ;
Field:rtti.TRttiField ;
begin
for Field in ctx.GetType(TypeInfo(TMyRecord)).GetFields do
ListBox1.Items.Add(Field.Name ); // i got nothing
end;
但是当我的Record不是const时,我的代码工作正常
type TMyRecord = record
value1: Integer;
value2: Integer;
value3: Integer;
value4: Integer;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
ctx:TRttiContext ;
Field:rtti.TRttiField ;
begin
for Field in ctx.GetType(TypeInfo(TMyRecord)).GetFields do
ListBox1.Items.Add(Field.Name ); //its work
end;
答案 0 :(得分:4)
RTTI无法枚举常量。虽然它们看起来像是田野,但它们却不是。它们的实现与记录命名空间内的任何其他常量一样。
您可能需要考虑另一种方法。例如,您可以使用属性而不是常量。或者可能添加一个枚举这些常量的类函数。
另一种方法是这样的:
type
TMyRecord = record
value1: Integer;
value2: Integer;
value3: Integer;
value4: Integer;
end;
const
MyConst: TMyRecord = (
value1: 10;
value2: 13;
value3: 18;
value4: 22
);