2013-12-14 77 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有什麼不同? –