加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 在运行时获取类中变量名的列表

发布时间:2020-12-15 09:18:02 所属栏目:大数据 来源:网络整理
导读:我在程序中声明了一些简单的类,例如 MyClass = class Var1 : Integer Var2 : Integerend; 我想要做的是在运行时获取此类(“MyClass”)中的变量列表(可能类似于组件的“GetPropList”?) 我想到这样的事情(显然,函数“GetVarNames”不存在,但我希望这给出了这
我在程序中声明了一些简单的类,例如

MyClass = class 
    Var1 : Integer
    Var2 : Integer
end;

我想要做的是在运行时获取此类(“MyClass”)中的变量列表(可能类似于组件的“GetPropList”?)

我想到这样的事情(显然,函数“GetVarNames”不存在,但我希望这给出了这个想法),它会将“MyClass”中列出的变量名称拉入TStringList中的字符串:

var
    MyVariableNamesList: TStringList
    i : integer;

begin
    MyVariableNamesList := TStringList.create;        
    MyVariableNamesList := GetVarNames(MyClass)

end;

任何人都可以建议吗?如果这是一个愚蠢的问题,请提前道歉!

解决方法

根据您的Delphi版本,您可以使用新的RTTI(Delphi 2010中引入).

你可以这样做:

function GetVarNames(const AClass : TObject) : TStringList;
var lType : TRttiType;
  lContext : TRttiContext;
  lProperty : TRttiProperty;
  lField : TRttiField;
begin
  Result := TStringList.create;
  LType := lContext.GetType(AClass.ClassType);
  if assigned(LType) then
  begin
    for LProperty in LType.GetProperties do
    begin
      Result.Add(lProperty.Name);
      //Get current value:
      Result.Add(lProperty.GetValue(AClass).ToString);
    end;
   for lField in LType.GetFields do
   begin
     Result.Add(lField.Name);
     //Get current value:
     Result.Add(lField.GetValue(AClass).ToString);
   end;
 end;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读