所以,正如标题所说,我有一个对象是propertyInfo。我想得的是那个属性,但我似乎无法找到办法。
首先我有这个方法:
public object GetPropertyInfo(object parent, String propertyName)
{
object propInf = null;
PropertyInfo[] propList = parent.GetType().GetProperties();
foreach (PropertyInfo pInf in propList)
{
if (propertyName == pInf.Name)
{
propInf = pInf;
}
}
return propInf;
}
并且它的效果相当好,假设提供的父母' object是一个常规类,而不是反射类型。
但是返回的一些属性包含我想要访问的属性。在这些情况下,我需要将PropertyInfo反馈到此方法中,并为该属性获取另一个PropertyInfo。但是,如果我将PropertyInfo对象放入此方法,它只返回PropertyInfo的属性列表(如您所想)。
我已经阅读了它,似乎我可能想要的是“GetValue' PropertyInfo类的方法。我有点不确定,因为我无法解析方法所需的内容。
即便如此,我也是这样写的:
public object GetPropertyInfo(object parent, String propertyName)
{
object propInf = null;
object o = null;
if (parent is PropertyInfo)
{
PropertyInfo p = (parent as PropertyInfo);
o = p.GetValue(p, null);
}
else
o = parent;
PropertyInfo[] propList = o.GetType().GetProperties();
foreach (PropertyInfo pInf in propList)
{
if (propertyName == pInf.Name)
{
propInf = pInf;
}
}
return propInf;
}
显然,我希望第二个可行。它会通过' if'声明很好,承认它是一个PropertyInfo类型,但接下来的部分提供了一个例外,如下所示:
TargetException:Object与目标类型不匹配。
也许我犯了“GetValue'因为我并不完全熟悉它,但如果我能在不指定类型的情况下做到这一点,那就太棒了。
答案 0 :(得分:6)
假设我明白你要做什么:
PropertyInfo
表示class
的属性,而不知道实例的 正在检查属性的class
的em>。
GetValue
方法可以为 给定实例 提供属性的值。
object value = somePropertyInfo.GetValue(someInstance);
// where someInstance is of the type which has someProperty's represented property.
如果您想要正在检查的属性的Type
的属性,您可以使用PropertyInfo.PropertyType.GetProperties();
但这只会让您属性Type
的属性,而不是它包含的具体(可能是派生的)Type
。