2011-07-01 131 views
1
class ClassA 
{ 
    public ClassB myProp {get;set;} 
} 

class ClassB 
{ 
    public ClassC anotherProp {get;set;} 
} 

class ClassC 
{ 
    public string Name {get;set;} 
} 

我有一个ClassA类型的对象。如何通过迭代递归获取ClassC的Name属性值?如何循环访问类属性树?

回答

0

好的,解决了。 比方说,我到的路径看重我想要得到的属性:

ClassB.ClassC.Name 

那么,parh我没有通过的递归遍历树分割后;)

var dataPath = column.SortMemberPath.Split(new char[] { '.' }); 

[...] 

foreach (var item in (System.Collections.IList)myObject) 
{ 
    var newItem = item; 

    foreach (var path in dataPath) 
    { 
     var actalValue = newItem.GetType().GetProperty(path).GetValue(newItem, null); 
     newItem = actalValue; //it does the trick 
    } 

    now, the newItem is my wanted property value 
} 
3

我对你想要完成的事情有点粗略。我想你想从ClassA开始,并最终遍历这些属性并进入ClassC。要做到这一点,你大多需要了解如何进行递归编程和少量的反射知识。这是我过去使用的代码的修改版本,您可以使用find here

private void SerializeObject(object obj) { 

    Type type = obj.GetType(); 

    foreach (PropertyInfo info2 in type.GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) 
    { 
     MethodInfo getMethod = info2.GetGetMethod(true); 

     if (getMethod != null) 
      SerializeObject(getMethod.Invoke(obj, null)); 
    } 

} 

这样做是通过每个属性走路和使用各个属性来执行的财产,获得正被退回,这样就可以通过调用相同SerializeObject方法穿行对象的get方法。