2012-10-27 57 views
2

我有一些問題,RTTI ..我瓦納枚舉記錄類型所有的constans值枚舉常量記錄字段

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; 

但是當我的記錄是不是一個常量,我的代碼做工精細

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; 
+3

這是因爲RTTI不支持常數 – RRUZ

回答

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