Sto cercando di ottenere tipi per i campi record per creare un confronto corretto (come soluzione generale per qualsiasi/quasi qualsiasi tipo di record). Non riesco a trovare le informazioni sul tipo per gli array statici:Ottenere il tipo di campo record con RTTI non riesce per gli array statici
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 è pari a zero per la matrice statica di qualsiasi tipo. Qualche idea cosa c'è di sbagliato qui? O forse c'è un modo più semplice per creare un confronto per i record da utilizzare con TArray/TDictionary ecc.?
Lo stesso vale per i tipi di ShortString (e la soluzione di David Heffernan funziona anche per loro). –