目的是为索引/非索引属性编写通用属性路径检索器。 对于索引,只需要考虑数值索引。
我有以下代码。这应该基于属性路径检索属性,甚至是索引属性。
我尝试在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#?),但找不到我的问题的答案:我做错了什么?