Как я могу получить тип элемента массива, используя RTTI - PullRequest
4 голосов
/ 31 декабря 2011

Я использую этот код для получения типа элемента массива

{$APPTYPE CONSOLE}    
uses
  Rtti,
  SysUtils;

type
  TFooArray= array  of TDateTime;

Var
  T : TRttiType;
begin
  try
     T:=TRttiContext.Create.GetType(TypeInfo(TFooArray));
      Writeln(TRttiArrayType(T).ElementType.Name);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

но приложение не работает с нарушением прав доступа в этой строке

Writeln(TRttiArrayType(T).ElementType.Name);

Как я могу получить тип элемента массива, используя RTTI?

1 Ответ

11 голосов
/ 31 декабря 2011

Вы приведете неверно, TRttiArrayType для статических массивов (и ваш массив динамический), чтобы исправить проблему, используйте TRttiDynamicArrayType вместо этого, например:

 Writeln(TRttiDynamicArrayType(T).ElementType.Name);
...