2011-12-24 141 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; 
}