我有一个场景,我有一个根类型,我的项目中有很多很多对象作为集合实现,就像这样......
class Page {
// ...
}
interface IPages{
IList<Page> Pages { get; set; }
}
然后有几十个对象,项目中几乎所有对象都有Page
的集合。
我需要做的是从根对象中将所有Page
个对象一直放在结构树中。然而,这可能是非常抽象的,并且确切地知道将存在什么是困难的。一个简单的'foreach'循环似乎不合适......
有没有办法从一个对象开始,检查它中的所有内容以查看它是否有接口,如果是,请递归地将适当的数据拉出到主集合中?
答案 0 :(得分:0)
很难说,因为Page似乎没有在您的示例中实现IPage。
根据您的实施情况,此扩展方法可能有效......
public static IEnumerable<Page> GetDescendantsAndSelf(this IPages root)
{
if(root == null)
yield break; // the Page doesn't implement IPages
if(root is Page) // the IPages is actually a Page
yield return root as Page;
// go through each child
// call this method recursively and return the result
foreach(var child in root.Pages)
foreach(var page in child.GetDescendantsAndSelf())
yield return page;
}