我想实现一个列表类型属性的Add方法。但是我得到了“Invalid class typecast”的错误。有人对此有什么想法吗?
Company.pas
TEmployes = class
private
FLastName: String;
FFirstName: String;
public
property FirstName: String
read FFirstName write FFirstName;
property LastName: String
read FLastName write FLastName;
end;
TContext = class
private
FEmployess: TList<TEmployes>;
public
constructor Create;
destructor Destroy; override;
property Employess: TList<TEmployes>
read FEmployess write FEmployess;
end;
Project1.pas
var Context: TContext := TContext.Create;
var rContext: TRttiContext := TRttiContext.Create;
var rIns : TRttiInstanceType :=
rContext.GetType(Context.ClassInfo) as TRttiInstanceType;
for var prop in rIns.GetProperties do
begin
var method: TRttiMethod := prop.PropertyType.GetMethod('Add');
var emp: TEmployes := TEmployes.Create;
emp.FirstName := 'Username';
method.Invoke(prop.ClassInfo, [emp]);
end;
Context.Free;
1条答案
按热度按时间rqqzpn5f1#
您没有指出哪一行代码引发了错误。
但是,使用RTTI访问和调用
TList<T>.Add()
方法的方式肯定是错误的,基本上调用RTTI是为了执行以下等效操作:您真正需要调用的是以下等效代码:
这意味着您需要实际读取
Context
对象的Employess
属性以获取其TList
对象,然后您可以在该TList
对象上调用Add()
,例如: