How to get the type of the elements in a declared TList

回眸只為那壹抹淺笑 提交于 2019-12-02 18:46:32

问题


I'd like to know if there is a way to get the type of the elements of a declared, but not instantiated, TList. I can capture the class of an object property like this:

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;

This way I can instantiate my list correctly. But now I also want to get the class of the elements, TMyObject, so that I can instantiate them, fill its properties and add to the list. How can I do that?

Thanks in advance.


回答1:


As far as I know, RTTI is not flexible enough to give you information about Generic parameters. You will likely have to manually parse the value of MyRTTIProperty.PropertyType.Name (TList<TMyObject>) to extract the Generic type name (TMyObject), then use TRttiContext.FindType() to get the RTTI for that type, and then finally you can create instances of its ClassType as needed.



来源:https://stackoverflow.com/questions/24183823/how-to-get-the-type-of-the-elements-in-a-declared-tlist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!