Hallo Zusammen,
oh, so viele Variante, vielen lieben Dank.
Ich benötige über den Index den Namen und Feldwert. Deshalb versucht ich die Varianten von @mytbo
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);
Delphi-Quellcode:
var rttiFields: TArray<TRttiField> := rttiType.GetFields;
//das TArray<TRttiField> hier bekomme ich einen Fehler angezeigt E2010 Inkompatible Typen 'String' und 'TValue'
Hat jemand eine Idee?