我正在使用这个代码来获取数组元素的类型。
但是该应用程序在此行出现访问冲突并失败。
{$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获取数组元素的类型?
TRttiArrayType(T)
或TRttiDynamicArrayType(T)
并不是一个好习惯。只有当您确定类型匹配时才应该这样做 - 而这在您的代码中并不是这种情况。在我看来,编写(T as TRttiArrayType)
可能是有意义的,或者首先测试if T is TRttiArrayType then...
,它执行相同的操作(但不会触发任何异常),但可以在循环之前进行一次。这将避免任何类似的类型混淆。 - Arnaud Bouchezif VarSomeObj is TSomeClass then with TSomeClass(VarSomeObj) do Something
。 - OnTheFly