只有當屬性的類型從某個基類繼承時,我如何遞歸地獲取對象的所有屬性?只有當這些屬性從某些基類繼承時,我如何才能在C#中遞歸搜索屬性?
這是我的嘗試:
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>
東西,從主/ BasePage的似乎繼承要返回虛假的IsAssignableFrom
?
您是否嘗試過linq的'.OfType'? –
2012-01-11 08:17:41
一秒鐘,我即將發佈我的嘗試.. – KingNestor 2012-01-11 08:19:18
anatoliiG - 我認爲是因爲'OfType'給出了給定類型的對象,在這裏不適用 - 涉及的集合都有類型爲'PropertyInfo'的項目,例如? – 2012-01-11 08:46:33