C# - 遍历树的节点并识别级别

时间:2017-05-22 19:50:40

标签: c# loops recursion tree

我有一个应用程序,允许用户从树结构中选择项目,然后将其传递给构建报告的方法。该项是最小的粒度级别,包含一个id值。我需要生成一个可枚举的对象,可用于生成夏季级别报告和单个项目报告。例如,下图显示了树和欲望报告结构。 enter image description here

我需要的是能够识别或标记需要单独打印的项目。换句话说,如果在任何子组中都找不到项目,则将其标记为需要打印个人。这很重要,因为项目可能存在于多个分组中。如何解析树并检查项目是否存在于子节点中?

Item和ItemSet(groups)类如下:

public class Item
{
    public int Property1 { get; set; }
    public int Property2 { get; set; }
    public int Property3 { get; set; }
    public int Property4 { get; set; }
}

public class ItemSet
{
    public List<Item> Items { get; set; }
    //.
    //.
    //.
    //.
    public List<ItemSet> ItemSets { get; set; }



}

请注意,项目集可以包含其他项目集。此外,项目列表包括所有项目,包括儿童项目。我需要一种机制来检查项目是否仅存在于该级别。

更新

为了进一步说明,我添加了汇总的类图来说明Items,ItemSet和整个应用程序的关系/组成。这是一个遗留代码库,所以我没有太大的灵活性,必须做与大多数存在的东西。在partiular集合上调用getAllItems()时,它会返回所有的死者,即使它是属于嵌套集的项目。我需要能够确定它是直接死者还是子集的子。

enter image description here

1 个答案:

答案 0 :(得分:0)

foreach (var item in itemSet.getAllItems())
{
  if (item.Parent == itemSet)
  {
    // Is child of itemSet
  }
  else
  {
    // Is descendant of nested itemSet
  }
}