Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#4

AW: Feldwerte eines Records über den Feldindex abrufen

  Alt 11. Sep 2023, 16:12
Gibt es eine RTTI Methode um dessen Wert über seinen Feldindex abzurufen?
Delphi-Quellcode:
function GetFieldValue(pmTypeInfo: Pointer; pmInstance: Pointer; pmFieldIdx: Integer): TValue;
begin
  if (pmTypeInfo <> Nil)
    and (pmInstance <> Nil)
    and (pmFieldIdx >= 0) then
  begin
    var rttiType: TRttiType := TRttiContext.Create.GetType(pmTypeInfo);
    if rttiType <> Nil then
    begin
      var rttiFields: TArray<TRttiField> := rttiType.GetFields;
      if Length(rttiFields) > pmFieldIdx then
        Exit(rttiFields[pmFieldIdx].GetValue(pmInstance));
    end;
  end;
  Result := TValue.Empty;
end;

var
  rec: TMyRecord;
begin
  rec.FeldC := 'Test';
  ShowMessage(GetFieldValue(TypeInfo(TMyRecord), @rec, 2).ToString);
Bis bald...
Thomas

Geändert von mytbo (11. Sep 2023 um 16:33 Uhr) Grund: Fehlerabfrage hinzugefügt
  Mit Zitat antworten Zitat