我想获取类属性的属性。
我现在拥有的:
foreach (var v in test.GetType().GetProperties())
{
foreach (var p in v.GetType().GetProperties())
{
}
}
第一个foreach
循环正常工作,并获取类变量test
的属性。但是,在第二个循环中,我得到MemberType
,ReflectedType
,Module
等输出,而不是实际属性。
我的目标是获取类属性的属性,然后编辑它们的值(使用其他函数截断它们)。
感谢。
答案 0 :(得分:8)
在第二个循环PropertyInfo
上返回一个v.PropertyType.GetProperties()
对象。你必须得到v的propertyType为foreach (var v in test.GetType().GetProperties())
{
foreach (var p in v.PropertyType.GetProperties())
{
// Stuff
}
}
才能达到你想要的效果。
所以,代码应该是:
{{1}}
答案 1 :(得分:7)
v
返回的类型是PropertyInfo的类型,因为v.PropertyType
是属性信息。您不希望PropertyInfo类型的属性 ,您需要该类型的属性。
使用v.GetType()
,而不是GetType()
。
答案 2 :(得分:0)
GetProperties()为您提供PropertyInfo对象,告诉您有关对象属性的信息。您需要使用GetValue
来实际获取这些属性的值。从那里,您可以重复该过程以获取该对象属性的值。
foreach (var v in test.GetType().GetProperties())
{
var propertyValue = v.GetValue(test);
foreach (var p in propertyValue.GetType().GetProperties())
{
var subPropertyValue = p.GetValue(propertyValue);
Console.WriteLine("{0} = {1}", p.Name, subPropertyValue);
}
}
编辑值后,使用SetValue
将其保留回对象。