使用RTTI访问记录的所有元素 [英] access all elements of a record using RTTI

查看:127
本文介绍了使用RTTI访问记录的所有元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  TmyRecord = 
aValue:我想将一个复杂/长的记录转储到一个备忘录中进行调试String
aNumber:Real;
Morenumbers:整数;
....
....
end;

我认为Delphi XE 2 RTTI应该让我有机会获得Fieldname,Fieldtype和value
在循环中,将此记录写入备忘录或.....

解决方案

作为起点 - 记录与简单的类型。对于复杂的字段(数组,类等)探索RTTI单元

 键入
TmyRecord = record
aValue:串;
aNumber:Real;
Morenumbers:整数;
结束
var
m:TMyRecord;
rtype:TRTTIType;
字段:TArray< TRttiField> ;;
i:整数;
begin
m.aValue:='OK';
m.aNumber:= Pi;
m.Morenumbers:= 666;
rtype:= TRTTIContext.Create.GetType(TypeInfo(TMyrecord));
Memo1.Lines.Add(rtype.ToString);
fields:= rtype.GetFields;
for i:= 0 to High(fields)do
Memo1.Lines.Add(Format('%s:%s ::%s',[
fields [i] .Name ,
fields [i] .FieldType.ToString,
fields [i] .GetValue(@m).ToString]));

输出:

 code> TmyRecord 
aValue:string :: OK
aNumber:Real :: 3.14159265358979
Morenumbers:Integer :: 666


I want to dump a complex / long record into a memo for debugging purpose

 TmyRecord =
     aValue : String 
     aNumber : Real;
     Morenumbers   :  Integer ;
     ....
     ....
  end;

I think Delphi XE 2 RTTI should give me the chance to get the Fieldname , Fieldtype and value within a loop, to write this record to a memo or .....

解决方案

As starting point - record with simple types. For complex fields (array, class etc) explore RTTI unit

type
  TmyRecord = record
    aValue: String;
    aNumber: Real;
    Morenumbers: Integer;
  end;
var
  m: TMyRecord;
  rtype: TRTTIType;
  fields: TArray<TRttiField>;
  i: Integer;
begin
  m.aValue := 'OK';
  m.aNumber := Pi;
  m.Morenumbers := 666;
  rtype := TRTTIContext.Create.GetType(TypeInfo(TMyrecord));
  Memo1.Lines.Add(rtype.ToString);
  fields := rtype.GetFields;
  for i := 0 to High(fields) do
    Memo1.Lines.Add(Format('%s: %s :: %s', [
      fields[i].Name,
      fields[i].FieldType.ToString,
      fields[i].GetValue(@m).ToString]));

output:

TmyRecord
aValue: string :: OK
aNumber: Real :: 3.14159265358979
Morenumbers: Integer :: 666

这篇关于使用RTTI访问记录的所有元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆