我想知道是否有办法获取已声明但未实例化的TList的元素类型。我可以像这样捕获对象属性的类:
MyList: TList<TMyObject> read FMyList;
MyRTTIProperty: TRttiProperty;
NewObject: TObject;
PropertyClass: TClass;
MyRttiProperty := MyRttiType.GetProperty('MyList');
PropertyClass := MyRTTIProperty.PropertyType.Handle.TypeData.ClassType; // (returns TList<TMyObject>)
NewObject := PropertyClass.Create;
这样我可以正确地实例化我的列表。但是现在我还想获得元素类TMyObject,以便我可以实例化它们,填充它的属性并添加到列表中。我怎么能这样做?
提前致谢。
答案 0 :(得分:0)
据我所知,RTTI不够灵活,无法为您提供有关通用参数的信息。您可能必须手动解析MyRTTIProperty.PropertyType.Name
(TList<TMyObject>
)的值以提取通用类型名称(TMyObject
),然后使用TRttiContext.FindType()
获取该类型的RTTI ,最后你可以根据需要创建ClassType
的实例。