如果具有名为“Name”的属性,则访问该属性的反射

时间:2014-02-06 17:35:02

标签: c# .net reflection

使用反射我得到一组PropertyInfo

var infos = typeof(T).GetProperties(.....)

我的对象(简化)

Customer
     Dog   (class with field 'Name')
     Cow   (class with field 'Name')
     FName (string)

当我循环显示信息时,我会在控制台上写下属性的值。如果该属性是一个类(狗,牛等),该类有一个"名称"财产,然后我需要写"名称"值。

基本上我如何确定 MemeberInfo 是否是一个类,并且属性是否被称为"名称"并写出来?

2 个答案:

答案 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);
            }
        }