2011-12-24 90 views
4

我有一個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 string Error { get; protected set; } 
} 

我需要自我Person類的屬性的列表:

var entity = preUpdateEvent.Entity; 

foreach (var item in entity.GetType().GetProperties()) //only FirstName & LastName 
{ 
    if (item.PropertyType == typeof(String))    
     item.SetValue(entity, "XXXXX" ,null); 
} 

現在GetProperties()包括:FirstName, LastName, Id, Error但我只需要自己的Person屬性即:FirstName, LastName

我如何才能獲得僅在Person上定義的屬性?

+0

您可以使用包裝類。 – 2011-12-24 10:48:02

+0

@Srcee我如何使用包裝類? – Ehsan 2011-12-24 11:03:01

回答

7

使用

var properties = typeof(Person).GetProperties(BindingFlags.Public | 
               BindingFlags.Instance | 
               BindingFlags.DeclaredOnly); 

DeclaredOnly價值documented這樣的:

指定只成員在提供的類型的層次水平,應考慮申報。不考慮繼承的成員。

+0

@Skeet謝謝。我的問題已解決,但有一個問題: 如何才能獲取字符串的屬性?例如:不包括Person類中的Assets屬性。 – Ehsan 2011-12-24 11:25:00

+0

@Ehsan:使用'PropertyInfo.PropertyType'來確定類型。 LINQ適用於這樣的事情:'properties.Where(p => p.PropertyType == typeof(string))'等等 – 2011-12-24 12:00:26

0

創建一個新的類,例如只有FirstName和LastName屬性的PersonTemplate。然後:

public PersonTemplate (Person p) 
{ 
    FirstName = p.FirstName; 
    LastName = p.LastName; 
}