Получение типа поля записи с RTTI не выполняется для статических массивов

Я пытаюсь получить типы для полей записи, чтобы создать правильный компаратор (как общее решение для любого/почти любого типа записи). Я не могу найти информацию о типе для статических массивов:

  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 равен нулю для статического массива любого типа. Есть идеи, что здесь не так? Или может есть более простой способ создать компаратор для записей, которые будут использоваться с TArray/TDictionary и т. д?

1 ответов


вам нужно объявить тип, чтобы иметь RTTI доступным. Например:

type
  TMyStaticArrayOfByte = array[0..3] of byte;

  TArrFieldTest = record
    a: string;
    b: TMyStaticArrayOfByte;
  end;