如何获取嵌套属性

时间:2010-06-24 16:05:21

标签: c# reflection

我想检索一个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)

谢谢

3 个答案:

答案 0 :(得分:8)

是:

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");

胜利的递归!

答案 1 :(得分:3)

在你刚刚获得的PropertyType财产上再做同样的事情(并根据需要重复):

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

答案 2 :(得分:0)

你可以做到,但你必须为每个级别做“整件事”,意思是:

  • 从对象类型中获取属性
  • 获取该属性的类型
  • 冲洗并重复:)
相关问题