2011-04-13 126 views
3

我有以下情形:使用反射来获得一个嵌套的属性值

class A 
{ 
    string Foo; 
} 

Class B 
{ 
    A PropertyA; 
} 

Class C 
{ 
    B PropertyB; 
} 

使用.NET反射,如果我开始与对象C来到达A.Foo的价值是否有可能?我遇到的问题是这样的: 我通过PropertyInfo对象到达A.但是,他们没有存储实例信息。因此,我不能做GetProperty(“Foo”)。GetValue(....),因为我只有C类对象被传入。

回答

4

您必须获取每个属性返回的对象,然后使用同样的反射程序,以获得下一个“层次”。

例如:

C instance = GetMyCInstance(); 

B propertyB = instance.GetType().GetProperty("PropertyB").GetValue(instance) as B; 
A propertyA = propertyB.GetType().GetProperty("PropertyA").GetValue(propertyB) as A; 
string Foo = propertyA.GetType().GetProperty("Foo").GetValue(propertyA) as string; 
+0

'乙propertyB = instance.GetType()的getProperty( “PropertyB”)的GetValue(例如,NULL)为B;'为我工作,谢谢。 – travis 2012-11-20 00:16:00