如何获取继承类的属性

4
我有一个继承自EntityBasePerson类:
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,但我只需要自己的属性,即:FirstName,LastName 如何获取仅定义在Person上的属性?

@Srcee 我怎样使用包装类? - Ehsan
2个回答

8
使用
var properties = typeof(Person).GetProperties(BindingFlags.Public |
                                              BindingFlags.Instance |
                                              BindingFlags.DeclaredOnly);
< p > DeclaredOnly 值是这样 文档 的:

指定只应考虑在提供的类型层次结构级别声明的成员。不考虑继承的成员。


@Skeet 谢谢你。我的问题已得到解决,但还有一个问题: 如何仅获取字符串的属性?例如:不包括Person类中的Assets属性。 - Ehsan
@Ehsan:使用 PropertyInfo.PropertyType 来确定类型。LINQ 在这种情况下运作良好:properties.Where(p => p.PropertyType == typeof(string)) 等等。 - Jon Skeet

0
创建一个新的类,例如PersonTemplate,该类将仅具有FirstName和LastName属性。然后:
public PersonTemplate (Person p)
{
    FirstName = p.FirstName;
    LastName = p.LastName;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接