使用RTTI分配属性,而不知道属性的类型

时间:2015-04-23 06:06:43

标签: delphi reflection pascal rtti

我有一些具有未知属性的对象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

类型

如何使这更通用?

1 个答案:

答案 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;