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