delphi遍历record

delphi遍历record

通过rtti遍历record,支持delphi2010以上版本,更低版本不支持。

可以遍历record的field的名称、类型和长度。

 uses system.rtti

复制代码
type
    Ttest = record
    str: string;
    i32: Integer;
    i64: Int64;
    sgl: Single;
    dbl: Double;
    ext: Extended;
    dt: TDateTime;
    bt: Byte;
  end;
复制代码
复制代码
//遍历record

  procedure loopRecord(aTypeInfo, instance: Pointer);
  begin
    var RTX: TRttiContext;
    var RT: TRttiType;
    var RF: TRttiField;
    RT := RTX.GetType(aTypeInfo);
    for RF in RT.AsRecord.GetFields do
      Memo1.Lines.Add(RF.Name + ' ' + RF.GetValue(instance).ToString + ' ' + RF.FieldType.ToString + ' ' + RF.RttiDataSize.ToString);
    RTX.Free;
    RF.Free;
    RT.Free;
  end;
复制代码
复制代码
procedure TForm1.button6Click(Sender: TObject);
begin
  var t: Ttest;
  t.str := 'str';
  t.i32 := 32;
  t.i64 := 64;
  t.sgl := 1.1;
  t.dbl := 2.2;
  t.ext := 3.3;
  t.dt := Now;
  t.bt := 1;
  loopRecord(TypeInfo(Ttest), @t);
end;
复制代码

执行结果

str str string 15
i32 32 Integer 15
i64 64 Int64 15
sgl 1.10000002384186 Single 15
dbl 2.2 Double 15
ext 3.3 Extended 15
dt 2022-05-13 20:01:47 TDateTime 14
bt 1 Byte 14

 

posted @   delphi中间件  阅读(573)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-04-27 System.JSON.Builders.pas
2020-04-27 crossvcl使用
2018-04-27 unidbgrid列排序
2013-04-27 HexStrToStream
2013-04-27 StreamToHexStr
点击右上角即可分享
微信分享提示