ShowMessage(TRttiContext.Create.GetType(TStringList)
.GetProperty('Strings').ToString);
上面的代码失败,因为.GetProperty在“Strings”,“Objects”,“Values”(带索引器的那些)等属性上返回nil。我认为这是一个已知的限制,问题是是否有任何方法可以访问这些索引属性(最好不要回退到旧的RTTI工具)。
答案 0 :(得分:2)
索引属性没有RTTI,但底层字段有。所以你可以直接通过RTTI访问TStringList.FList。但要小心,因为这涉及到原始指针,并确保不要超出Count属性。你可以和其他班级做类似的事情。
答案 1 :(得分:1)
RTTI存在差距。索引属性是一个。
但是当你没有获得属性名称时,为什么要尝试访问它们? ;-)如果您知道有这样的属性,您可以尝试使用强制转换。
您没有获得typ
的方法参数的RTTI procedure MyProc(const AParam: array of AType)
也。
任何了解更多元素的人都无法获得RTTI?