代码之家  ›  专栏  ›  技术社区  ›  Florian

如何获取嵌套属性

  •  6
  • Florian  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  10
  •   gunr2171    10 年前

    对:

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

    为胜利而递归!

        2
  •  3
  •   Lucero    14 年前

    再做一次同样的事 PropertyType

    PropertyInfo property = GetType().GetProperty(propertyName);
    PropertyInfo nestedProperty = property.PropertyType.GetProperty(nestedPropertyName)
    
        3
  •  0
  •   Matteo Mosca    14 年前

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

    • 从对象类型获取属性
    • 冲洗并重复:)