gpt4 book ai didi

delphi - 枚举常量记录字段

转载 作者:行者123 更新时间:2023-12-03 18:28:07 24 4
gpt4 key购买 nike

我在使用 RTTi 时遇到了一些问题。我想枚举 Record 类型中的所有常量值

 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;

最佳答案

RTTI 不能枚举常量。虽然它们可能看起来是字段,但它们不是。它们像任何其他常量一样在记录的命名空间内实现。

您可能不得不考虑另一种方法。例如,您可以使用属性而不是常量。或者可能添加一个枚举这些常量的类函数。

另一种方法是这样的:

type
TMyRecord = record
value1: Integer;
value2: Integer;
value3: Integer;
value4: Integer;
end;

const
MyConst: TMyRecord = (
value1: 10;
value2: 13;
value3: 18;
value4: 22
);

关于delphi - 枚举常量记录字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com