试图将同一对象的子项查询到n深度并以以下格式显示。因此,为每个子猫添加标签空间。
Cat 1
Sub Cat 1 - 1
Sub Cat 1 - 2
Cat 2
Sub Cat 2 - 1
Sub Cat 2 - 2
Sub Cat 3 - 2 - 2
class NavItem {
public string label { get; set; }
public List<NavItem> childItems { get; set; }
}
创建项目
var item = new NavItem()
{
label = "Root",
childItems = new List<NavItem>() {
new NavItem() { label = "Cat 1" , childItems = new List<NavItem>() {
new NavItem() { label = "Sub Cat 1 - 1" },
new NavItem() { label = "Sub Cat 1 - 2" },
} },
new NavItem() { label = "Cat 2", childItems = new List<NavItem>() {
new NavItem() { label = "Sub Cat 2 - 1" },
new NavItem() { label = "Sub Cat 2 - 2", childItems = new List<NavItem>() {
new NavItem() { label = "Sub Cat 3 - 2 - 2"}
} },
} },
}
};
我有以下代码,该代码不完整。它只能走两个深度
item.childItems.ForEach(i => {
Console.WriteLine(i.label);
i.childItems.ForEach(i1 =>
{
Console.WriteLine("\t" + i1.label);
});
});
答案 0 :(得分:1)
我不认为您只能编写LINQ查询来实现所需的功能,因为事先不知道深度,所以您将需要编写遍历树的递归函数。
答案 1 :(得分:1)
是的,如第一个答案所示,这需要递归。
Display(item, 0);
void Display(NavItem item, Int32 tabs)
{
Console.WriteLine($"{new String('\t', tabs)}{item.label}");
if (item.childItems != null)
{
foreach (var child in item.childItems)
{
Display(child, tabs + 1);
}
}
}