获取类属性的属性

时间:2018-04-07 16:05:50

标签: c# reflection system.reflection

我想获取类属性的属性。

我现在拥有的:

foreach (var v in test.GetType().GetProperties())
{
    foreach (var p in v.GetType().GetProperties())
    {
    }
}

第一个foreach循环正常工作,并获取类变量test的属性。但是,在第二个循环中,我得到MemberTypeReflectedTypeModule等输出,而不是实际属性。

我的目标是获取类属性的属性,然后编辑它们的值(使用其他函数截断它们)。

感谢。

3 个答案:

答案 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将其保留回对象。