使用反射我得到一组PropertyInfo
:
var infos = typeof(T).GetProperties(.....)
我的对象(简化)
Customer
Dog (class with field 'Name')
Cow (class with field 'Name')
FName (string)
当我循环显示信息时,我会在控制台上写下属性的值。如果该属性是一个类(狗,牛等),该类有一个"名称"财产,然后我需要写"名称"值。
基本上我如何确定 MemeberInfo 是否是一个类,并且属性是否被称为"名称"并写出来?
答案 0 :(得分:1)
foreach( var pi in typeof( startingType ).GetProperties() )
{
var pt = pi.PropertyType;
if( pt.IsClass && null != pt.GetProperty( "Name" ) )
{
Console.WriteLine( pt.Name + " (class with field 'Name')" );
}
}
答案 1 :(得分:1)
@Moho是对的,但它没有解释如何写出我认为你想要的实际名称。
假设您的Customer
对象位于名为obj
的变量中,这将执行此操作:
foreach (var pi in typeof(T).GetProperties())
{
var propertyValue = pi.GetValue(obj); // This is the Dog or Cow object
var pt = pi.PropertyType;
var nameProperty = pt.GetProperty("Name");
if (pt.IsClass && nameProperty != null)
{
var name = nameProperty.GetValue(propertyValue); // This pulls the name off of the Dog or Cow
Console.WriteLine(name);
}
}