获取 class 的属性的属性

Get properties of properties of a class

我想获取一个class的属性。

我现在拥有的:

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

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

我的目标是获取 class 的属性的属性,然后编辑它们的值(使用另一个函数截断它们)。

谢谢。

v.GetType()返回的类型是PropertyInfo的类型,因为v是一个属性信息。您不需要 PropertyInfo 类型的属性,您需要类型本身的属性。

使用 v.PropertyType,而不是 v.GetType()

在第二个循环中 GetType() returns 一个 PropertyInfo 对象。您必须将 v 的 propertyType 设为 v.PropertyType.GetProperties() 才能实现您想要的。

所以,代码应该是:

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

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 将其保存回对象。