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 :(得分: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));
}
}
这样做是遍历每个属性并使用每个属性的get方法来执行属性并获取正在返回的对象,以便您可以通过调用相同的SerializeObject
方法来遍历它。
答案 1 :(得分: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
}