Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 遍历具有多个层的嵌套列表_C#_List_Loops_Nested_Nodes - Fatal编程技术网

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);
}