如何获取声明的TList中的元素类型

时间:2014-06-12 11:58:51

标签: delphi generics delphi-xe3 rtti

我想知道是否有办法获取已声明但未实例化的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,以便我可以实例化它们,填充它的属性并添加到列表中。我怎么能这样做?

提前致谢。

1 个答案:

答案 0 :(得分:0)

据我所知,RTTI不够灵活,无法为您提供有关通用参数的信息。您可能必须手动解析MyRTTIProperty.PropertyType.NameTList<TMyObject>)的值以提取通用类型名称(TMyObject),然后使用TRttiContext.FindType()获取该类型的RTTI ,最后你可以根据需要创建ClassType的实例。