整理多个未知对象的集合

时间:2011-04-18 15:03:03

标签: c# linq

我有一个场景,我有一个根类型,我的项目中有很多很多对象作为集合实现,就像这样......

class Page {
  // ... 
}
interface IPages{
  IList<Page> Pages { get; set; }
}

然后有几十个对象,项目中几乎所有对象都有Page的集合。

我需要做的是从根对象中将所有Page个对象一直放在结构树中。然而,这可能是非常抽象的,并且确切地知道将存在什么是困难的。一个简单的'foreach'循环似乎不合适......

有没有办法从一个对象开始,检查它中的所有内容以查看它是否有接口,如果是,请递归地将适当的数据拉出到主集合中?

1 个答案:

答案 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;
}