我正在调用对象内部的方法,并且我试图保持非常动态的方式,我遇到了一个问题,我的返回类型是一些对象的列表,我考虑使用 TObjectList现在的问题是 rtti 返回一个 TValue 并且我不完全理解如何将其转换为 TObjectList。我认为将 TValue 转换为 TObject 因为理论上 TObjectList 是一个对象,但它不起作用。你们知道我如何才能实现这一目标吗?
这就是我正在谈论的功能。
function TMyClass.ExecMethodAndRet(MethodName: string;
Args: array of TValue): TObjectList<TObject>;
var
R : TRttiContext;
T : TRttiType;
M : TRttiMethod;
begin
T := R.GetType(FMyObject.ClassInfo);
for M in t.GetMethods do
if (m.Parent = t) and (UpperCase(m.Name) = UpperCase(MethodName))then
begin
result := M.Invoke(FMyObject, Args); <- problem here can't cast to TObjectList
end;
end;
最佳答案
返回:
Result := M.Invoke(Self, Args).AsType<TObjectList<TObject>>;
附注不要忘记初始化返回值,最好是在函数体的开头。
关于delphi - 在delphi中从RTTI返回一个ObjectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48690532/