我想要得到类的属性的属性。
我现在拥有的是:
foreach (var v in test.GetType().GetProperties())
{
foreach (var p in v.GetType().GetProperties())
{
}
}第一个foreach循环工作良好,并获得类变量test的属性。但是,在第二个循环中,我得到了输出,如MemberType、ReflectedType、Module等。不是真正的财产。
我的目标是获取类属性的属性,然后编辑它们的值(使用另一个函数截断它们)。
谢谢。
发布于 2018-04-07 16:09:36
在第二个循环中,GetType()返回一个PropertyInfo对象。您必须将v的propertyType作为v.PropertyType.GetProperties()来实现您想要的结果。
因此,代码应该是:
foreach (var v in test.GetType().GetProperties())
{
foreach (var p in v.PropertyType.GetProperties())
{
// Stuff
}
}发布于 2018-04-07 16:09:34
v.GetType()返回的类型是PropertyInfo,因为v是属性信息。您不需要PropertyInfo类型的属性,您需要该类型本身的属性。
使用v.PropertyType,而不是v.GetType()。
发布于 2018-04-09 21:54:36
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将其持久化回对象。
https://stackoverflow.com/questions/49709286
复制相似问题