我有一些具有未知属性的对象newObject
,我希望能够在不知道属性类型的情况下为其属性赋值。
我能做的最好的事情是
vCtx := TRttiContext.Create;
vType := vCtx.GetType(newObject.ClassType);
for vProp in vType.GetProperties do
begin
vPropValue := 'Test Value';
val := TValue.From<String>( vPropValue);
vProp.SetValue( newObject , val );
end;
当然,这假设属性属于string
如何使这更通用?
答案 0 :(得分:6)
由于您没有提供获取价值的信息,并且说您可以自己处理(在评论中)我只是发布部分以找出房产类型并将其余部分留给您,除非您提供其他信息。
我也把所有其他类型的东西留给你,给你一个粗略的想法。
if vProp.IsWritable then
begin
case vProp.PropertyType.TypeKind of
tkInteger: val := TValue.From<Integer>(...);
tkFloat: val := TValue.From<Double>(...);
tkUString: val := TValue.From<string>(...);
end;
vProp.SetValue(newObject, val);
end;