枚举常量记录字段

时间:2012-10-27 00:28:09

标签: delphi delphi-2010

我遇到了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;

1 个答案:

答案 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
  );