2010-06-24 77 views
5

我想要檢索的PropertyInfo,下面的代碼:如何獲得嵌套屬性

string propertyName="Text"; 
PropertyInfo pi = control.GetType().GetProperty(propertyName); 

它工作正常,但如果我想要檢索嵌套屬性,它返回null:

string propertyName="DisplayLayout.Override.RowSelectors"; 
PropertyInfo pi = control.GetType().GetProperty(propertyName); 

是有沒有辦法獲得嵌套的屬性?

最好的問候,

弗洛裏安

編輯:我現在有一個新的問題,我希望得到一個屬性,它是一個數組:

string propertyName="DisplayLayout.Bands[0].Columns"; 
PropertyInfo pi = control.GetType().GetProperty(propertyName) 

謝謝

回答

7

是:

public PropertyInfo GetProp(Type baseType, string propertyName) 
{ 
    string[] parts = propertyName.Split('.'); 

    return (parts.Length > 1) 
     ? GetProp(baseType.GetProperty(parts[0]).PropertyType, parts.Skip(1).Aggregate((a,i) => a + "." + i)) 
     : baseType.GetProperty(propertyName); 
} 

叫:

PropertyInfo pi = GetProp(control.GetType(), "DisplayLayout.Override.RowSelectors"); 

遞歸爲贏!

+0

謝謝! 我想知道如何通過一個指標得到一個屬性: string propertyName =「DisplayLayout.Bands [0] .Columns」; PropertyInfo pi = control.GetType()。GetProperty(propertyName); – Florian 2010-06-25 07:33:59

3

剛在PropertyType上再次做同樣的事情(並根據需要重複):

PropertyInfo property = GetType().GetProperty(propertyName); 
PropertyInfo nestedProperty = property.PropertyType.GetProperty(nestedPropertyName) 
+0

是的,我忘記了我的答案中的PropertyType位。 – 2010-06-24 16:13:01

0

你可以做到這一點,但你必須做「整個事情」每個級別,這意味着:

  • 從對象類型
  • 取得屬性獲取該屬性的類型
  • 沖洗,重複:)