ShowMessage(TRttiContext.Create.GetType(TStringList)
.GetProperty('Strings').ToString);
上面的代码失败,因为 .GetProperty 对“字符串”、“对象”、“值”(带有索引器的属性)等属性返回 nil。我认为这是一个已知的限制,问题是是否有任何方法可以访问这些索引属性(最好不要回退到旧的 RTTI 实用程序)。
ShowMessage(TRttiContext.Create.GetType(TStringList)
.GetProperty('Strings').ToString);
上面的代码失败,因为 .GetProperty 对“字符串”、“对象”、“值”(带有索引器的属性)等属性返回 nil。我认为这是一个已知的限制,问题是是否有任何方法可以访问这些索引属性(最好不要回退到旧的 RTTI 实用程序)。
索引属性没有 RTTI,但基础字段有。所以可以直接通过RTTI访问TStringList.FList。不过要小心,因为这涉及到原始指针,并确保不要超出 Count 属性。你可以对其他类做类似的事情。
RTTI 存在差距。索引属性是其中之一。
但是,当您没有获得属性名称时,为什么要尝试访问它们?;-) 当您知道有这样的属性时,您可以尝试使用强制转换。
对于 typ 的方法参数,您没有获得 RTTI
procedure MyProc(const AParam: array of AType)
还。
有人知道我们无法获得 RTTI 的更多元素吗?