问题
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