索引/非索引属性的通用属性路径检索器

时间:2013-06-19 17:10:20

标签: c# reflection properties

目的是为索引/非索引属性编写通用属性路径检索器。 对于索引,只需要考虑数值索引。

我有以下代码。这应该基于属性路径检索属性,甚至是索引属性。 我尝试在MyObject上使用它,它具有一个DataTable的Data属性。 propertyPath将是例如Data.Rows [0] 当执行到达带注释的行时,会抛出System.Reflection.TargetParameterCountException

  

参数计数不匹配。

    public static object GetPropertyPathValue(object value, string propertyPath)
    {
        object propValue = value;
        foreach (string propName in propertyPath.Split('.'))
        {
            string propName2 = propName;
            object[] index = null;
            int bracket1 = propName2.IndexOf("[");
            int bracket2 = propName2.IndexOf("]");
            if ((-1 < bracket1) && (-1 < bracket2))
            {
                index = new object[] { Int32.Parse(propName2.Substring(bracket1 + 1, bracket2 - bracket1 - 1)) };
                propName2 = propName2.Substring(0, bracket1);
            }
            PropertyInfo propInfo = propValue.GetType().GetProperty(propName2);
            propValue = propInfo.GetValue(propValue, index); // Exception thrown here
        }
        return propValue;
    }

我已经检查了这个(PropertyInfo.GetValue() - how do you index into a generic parameter using reflection in C#?),但找不到我的问题的答案:我做错了什么?

1 个答案:

答案 0 :(得分:2)

我的开源项目Xoml的代码完全符合您的需求。查看this特定源文件。

另外 - 我认为你无法找到属性的原因是因为默认索引器称为“Item”。看看第116行。