2010-06-24 69 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

你可以做到这一点,但你必须做“整个事情”每个级别,这意味着:

  • 从对象类型
  • 取得属性获取该属性的类型
  • 冲洗,重复:)