Как я могу рекурсивно получить все свойства объекта, только если тип свойства наследуется от некоторого базового класса?
Это была моя попытка:
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));
Однако количество возвращаемых свойств всегда равно нулю. Что я делаю не так?
Edit:
Я не уверен, имеет ли это значение, но подклассы являются общими классами:
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
?