使用RTTI指定属性而不知道属性是什么类型

问题描述:

我有一些对象newObject具有未知属性,我希望能够为其属性指定值而不必知道属性是什么类型。使用RTTI指定属性而不知道属性是什么类型

我到目前为止做的最好的是

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

TValue.From ???>(vPropValue) – sav

+1

检查属性的typekind并使用正确的TValue? – whosrdaddy

+0

如果您不知道类型,您想如何分配值?这没有任何意义。 –

由于您没有提供获取价值的地方以及您可以自己处理的信息(在评论中),我只需发布该部分以找出房产类型,并将其余部分留给您,除非您提供更多信息。

我也给你留下所有其他类型,给你一个粗略的想法。

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;