如何获取非集合属性的属性

时间:2013-12-14 09:21:18

标签: c# reflection

我有Person类继承EntityBase

public class Person : EntityBase
{        
   virtual public string FirstName { get; set; }
   virtual public string LastName { get; set; } 
   virtual public IList<Asset> Assets { get; set; }   

}

public class EntityBase : IEntity
{    
   public virtual long Id { get; protected set; }
   public virtual IEnumurable<string> Errors { get; protected set; }
}

我需要获取不是集合的Person类的属性列表

现在GetProperties()包括:FirstName, LastName, Assets, Id, Errors但我只需要数组属性:FirstName, LastName, Id

如何获取非集合的属性?

1 个答案:

答案 0 :(得分:6)

您可以按属性的返回类型进行过滤。我怀疑你想要过滤掉任何实现IEnumerable的内容,但不是 string(实现IEnumerable<char>,但你要保留它)。如下所示:

var properties = type.GetProperties()
       .Where(p => p.PropertyType == typeof(string) ||
                   !typeof(IEnumerable).IsAssignableFrom(p.PropertyType));