Как получить свойства для класса наследования - PullRequest
4 голосов
/ 24 декабря 2011

У меня есть 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; }
}

Мне нужно получить список свойств self Person class:

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

Ответы [ 2 ]

8 голосов
/ 24 декабря 2011

Использование

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

Значение DeclaredOnly задокументировано , например:

Указывает, что должны рассматриваться только члены, объявленные на уровне иерархии предоставленного типа. Унаследованные члены не считаются.

0 голосов
/ 24 декабря 2011

Создайте новый класс, например PersonTemplate, который будет иметь только свойства FirstName и LastName.Тогда:

public PersonTemplate (Person p)
{
    FirstName = p.FirstName;
    LastName = p.LastName;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...