获取 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
的属性。但是,在第二个循环中,我得到了 MemberType
、ReflectedType
、Module
等输出。不是实际属性。
我的目标是获取 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
将其保存回对象。
我想获取一个class的属性。
我现在拥有的:
foreach (var v in test.GetType().GetProperties())
{
foreach (var p in v.GetType().GetProperties())
{
}
}
第一个 foreach
循环工作正常并获取 class 变量 test
的属性。但是,在第二个循环中,我得到了 MemberType
、ReflectedType
、Module
等输出。不是实际属性。
我的目标是获取 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
将其保存回对象。