使用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
如何使这个更普遍?
答
由于您没有提供获取价值的地方以及您可以自己处理的信息(在评论中),我只需发布该部分以找出房产类型,并将其余部分留给您,除非您提供更多信息。
我也给你留下所有其他类型,给你一个粗略的想法。
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;
TValue.From ???>(vPropValue) – sav
检查属性的typekind并使用正确的TValue? – whosrdaddy
如果您不知道类型,您想如何分配值?这没有任何意义。 –