1

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

我有以下代码。这应该基于属性路径检索属性,甚至是索引属性。我尝试在 MyObject 上使用它,它的 Data 属性是DataTable. 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() - 如何在 C# 中使用反射来索引泛型参数?)但找不到我的问题的答案:我做错了什么?

4

1 回答 1

2

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

另外-我认为您找不到该属性的原因是因为默认索引器称为“项目”。看第 116 行。

于 2013-06-19T17:17:37.013 回答