如何在类属性树中循环

  • 本文关键字:循环 属性 c# reflection
  • 更新时间 :
  • 英文 :

class ClassA 
{
   public ClassB myProp {get;set;}
}
class ClassB 
{
   public ClassC anotherProp {get;set;}
}
class ClassC 
{
   public string Name {get;set;}
}

我有一个ClassA类型的对象。如何通过反射递归迭代来获得ClassC的Name属性值?

我对你想要实现的目标有点粗略。我认为你想从ClassA开始,最终通过属性到达ClassC。要做到这一点,您主要需要了解如何进行递归编程以及少量的反射知识。这是我过去使用过的代码的修改版本,您可以在这里找到。

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));
    }
}

它所做的是遍历每个属性,并使用每个属性的get方法来执行该属性并获取正在返回的对象,这样您就可以通过调用相同的SerializeObject方法来遍历它。

好的,解决了。假设我有一条通往我想要获得的房产价值的路径:

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 
}

相关内容

  • 没有找到相关文章

最新更新