2011-07-01 6 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

OK、解決済み。

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 
} 
);私は再帰なしでツリーを反復処理parh分割後、

ClassB.ClassC.Name 

その後: のは私が取得したいValueプロパティへのパスを持っているとしましょう

3

私はあなたが達成したいと思っていたことを少しはスケッチしました。私はあなたがClassAで始まり、最終的にプロパティを歩き、ClassCに行きたいと思う。これを行うには、主に再帰的プログラミングを行う方法と、Reflectionの知識を少量理解する必要があります。ここでは、私が過去に使ったコードの修正版です。これは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メソッドを使用しています。

関連する問題