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

sav*_*sav 0 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;
Run Code Online (Sandbox Code Playgroud)

当然,这假设属性是类型 string

我如何使这更一般?

Ste*_*nke 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;
Run Code Online (Sandbox Code Playgroud)