2012-10-27 2 views
2

나는 .. 레코드 유형의 모든 콘스탄스 값을 열거 내가 와나를 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; 

하지만 내 기록은, 내 코드가 작동 벌금 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; 
+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 
);