Próbuję uzyskać typy pól rekordów w celu utworzenia poprawnego porównywalnika (jako ogólne rozwiązanie dla dowolnego/prawie dowolnego typu rekordu). Nie mogę znaleźć informacji o typie dla tablic statycznych:Uzyskiwanie typu pola rekordu z błędem RTTI dla macierzy statycznych
TArrFieldTest = record
a: string;
b: array[0..3] of byte;
end;
procedure Test;
var
rttiContext: TRttiContext;
rttiType: TRttiType;
rttiFields: TArray<TRttiField>;
begin
rttiType := rttiContext.GetType(TypeInfo(TArrFieldTest));
rttiFields := rttiType.GetFields;
Assert(rttiFields[0].FieldType<>nil); // it's ok
Assert(rttiFields[1].FieldType<>nil); // fail here!
end;
FieldType jest zerowa dla statycznej tablicy dowolnego typu. Jakieś pomysły, co tu jest nie tak? A może jest łatwiejszy sposób na stworzenie porównywalnika dla rekordów do użycia z TArray/TDictionary itp.?
To samo dotyczy typów ShortString (rozwiązanie Davida Heffernana również działa na nich). –