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
}