Как я могу рекурсивно получить все свойства объекта, только если тип свойства наследуется от некоторого базового класса?
Это была моя попытка:
static IEnumerable<PropertyInfo> FindProperties(object objectTree, Type targetType)
{
if (objectTree.GetType().IsAssignableFrom(targetType))
{
var properties = objectTree.GetType().GetProperties();
foreach (var property in properties)
{
yield return property;
}
foreach (var property in FindProperties(properties, targetType))
{
yield return property;
}
}
}
Чтобы я мог позвонить,
var allPropertiesOfPageTypes = FindProperties(someClass, typeof(Page));
Однако количество возвращаемых свойств всегда равно нулю. Что я делаю не так?
Редактировать:
Я не уверен, что это имеет значение, но подклассы являются общими классами:
public abstract class MasterPage<T> : BasePage<T> where T : MasterPage<T>
Это наследует:
public abstract class BasePage<T> : Page where T : BasePage<T>
Вещи, которые наследуются от Master/BasePage, похоже, возвращают false для IsAssignableFrom
?
.OfType<T>
от linq? - person Anatolii Gabuza   schedule 11.01.2012OfType
дает объекты определенного типа, это не будет здесь применимо - например, во всех задействованных коллекциях есть элементы типаPropertyInfo
? - person Kieren Johnstone   schedule 11.01.2012