2013-12-14 44 views
1

我有一个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

我如何获得不是集合的属性?

+0

那么'资产'和'错误'实际上并不是数组......它们只是集合。 –

+0

对不起, 我的目的是收集 – Ehsan

回答

6

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

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

你知道,你应该辞职,让人们回答。说真的,至少考虑不要成为一个机器人,并快速回答。 –

+0

我快到了!他是630k,我是611 .. –

+0

@akanksha:为什么不能给出正确的结果?受保护的setter有什么不同? –