2015-04-23 71 views
0

我有一些對象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

如果您不知道類型,您想如何分配值?這沒有任何意義。 –

回答

5

由於您沒有提供獲取價值的地方以及您可以自己處理的信息(在評論中),我只需發佈該部分以找出房產類型,並將其餘部分留給您,除非您提供更多信息。

我也給你留下所有其他類型,給你一個粗略的想法。

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; 
相關問題