C# 遍历具有多个层的嵌套列表
考虑这样一个场景:您有一个集合,集合中有特定的对象。这些对象还包含一个集合,在这些集合中有更多相同的对象。这是一个有许多层的嵌套集合C# 遍历具有多个层的嵌套列表,c#,list,loops,nested,nodes,C#,List,Loops,Nested,Nodes,考虑这样一个场景:您有一个集合,集合中有特定的对象。这些对象还包含一个集合,在这些集合中有更多相同的对象。这是一个有许多层的嵌套集合 List<WorkItemClassificationNode> items; List<WorkItemClassificationNode> subItems = items.Children; List<WorkItemClassificationNode> subSubItems = subItems.Children;
List<WorkItemClassificationNode> items;
List<WorkItemClassificationNode> subItems = items.Children;
List<WorkItemClassificationNode> subSubItems = subItems.Children;
// etc
列表项;
列出子项=项。子项;
列表子项=子项。子项;
//等
我只想要一个方法来迭代这些层中的每一层,以便对每一项应用相同的逻辑,但我想不出一种不编写嵌套循环负载的简单方法。您应该研究编写递归方法。(互联网上有很多关于它的信息) 本质上,递归方法是一种调用自身的方法
只是要注意这一点 您应该研究编写递归方法。(互联网上有很多关于它的信息) 本质上,递归方法是一种调用自身的方法
只是要注意这一点 你要找的东西叫做或。选择一个,他们是非常有用的你正在寻找的是所谓的或。选择一个,他们很有帮助这绝对不是生产代码P是,执行空检查,是,检查继续递归兔子洞的条件…@MongZhu函数将始终在处理所有子函数后结束。没有什么可以阻止这一点。从节点不再具有子节点的那一刻起,它将返回到上一级别。这项工作的唯一初始条件是子节点永远不会链接回父节点,如果需要,可以使用某种通过引用传递给函数的已处理项清单来检查这一点。@MongZhu Scott Perham在他的第一次回复中提到了这一点。这句话的意思是“这绝不是生产代码!是的,执行空检查”。但这取决于儿童是如何实施的;完全可能该类总是将
子类初始化为空列表。如果列表为空,它将不会调用递归方法。。。foreach创建一个枚举数,如果没有项,MoveNext()
将为该枚举数返回false。这里唯一的问题是可能出现空节点和子节点(我现在已经解决了)谢谢,这是我一直在寻找的。这绝不是生产代码P是,执行空检查,是,检查继续递归兔子洞的条件…@MongZhu函数将始终在处理所有子函数后结束。没有什么可以阻止这一点。从节点不再具有子节点的那一刻起,它将返回到上一级别。这项工作的唯一初始条件是子节点永远不会链接回父节点,如果需要,可以使用某种通过引用传递给函数的已处理项清单来检查这一点。@MongZhu Scott Perham在他的第一次回复中提到了这一点。这句话的意思是“这绝不是生产代码!是的,执行空检查”。但这取决于儿童是如何实施的;完全可能该类总是将子类初始化为空列表。如果列表为空,它将不会调用递归方法。。。foreach创建一个枚举数,如果没有项,MoveNext()
将为该枚举数返回false。这里唯一的问题是可能出现空节点和子节点(我现在已经解决了)谢谢,这就是我想要的
void DoThing(WorkItemClassificationNode node)
{
if (node == null)
return;
//Do something with node
if (node.Children == null)
return;
foreach(var child in node.Children)
DoThing(child);
}