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
我如何使这更一般?
由于您没有提供获取价值的信息,并且说您可以自己处理(在评论中)我只是发布零件以找出属性类型,除非您提供其他信息,否则请将其余部分留给您.
我也把所有其他类型的东西留给你,并给你一个粗略的想法.
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)