【问题标题】:How to get nested properties如何获取嵌套属性
【发布时间】:2010-06-24 16:05:21
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    是的:

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

    递归取胜!

    【讨论】:

    • 谢谢!我想知道如何通过索引器获取属性: string propertyName="DisplayLayout.Bands[0].Columns"; PropertyInfo pi = control.GetType().GetProperty(propertyName);
    【解决方案2】:

    只需在您刚刚为该属性获得的PropertyType 上再次执行相同操作(并根据需要多次重复):

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

    【讨论】:

    • 是的,我忘记了答案中的 PropertyType 位。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2010-11-05
      相关资源
      最近更新 更多