C# 遍历包含另一个列表的列表,该列表包含另一个列表等

C# 遍历包含另一个列表的列表,该列表包含另一个列表等,c#,.net-framework-version,C#,.net Framework Version,所以我有一个我定义的特定类的列表,比如说IListA 元素类具有IList b 列表从文件中获取数据。 B可以有一个包含列表的列表,该列表包含列表等。。。“递归地” 或者B只能有一个列表 i、 e B嵌套列表可能会有所不同 我想迭代所有列表。有没有可能的办法 简单的方法是堆栈递归-对于许多常见的场景来说都很好: A类{ 列表; void DoTheThing(){ foreach(列表中的变量b)b.DoTheThing(); } } B类{ 列出项目; void DoTheThing(){ D

所以我有一个我定义的特定类的列表,比如说
IListA
元素类具有
IList b

列表从文件中获取数据。 B可以有一个包含列表的列表,该列表包含列表等。。。“递归地” 或者B只能有一个列表 i、 e B嵌套列表可能会有所不同

我想迭代所有列表。有没有可能的办法

简单的方法是堆栈递归-对于许多常见的场景来说都很好:

A类{
列表;
void DoTheThing(){
foreach(列表中的变量b)b.DoTheThing();
}
}
B类{
列出项目;
void DoTheThing(){
DothethingThisLevel();
//现在又出现了
foreach(var inner in_innerItems)inner.DoTheThing();
}
}
对于非常深的列表来说,这可能是一个问题,因为堆栈可能变得太大;在这种情况下,使用本地队列或堆栈并将其用于逻辑状态可以避免:

A类{
列表;
void DoTheThing(){
var queue=新队列();
foreach(列表中的变量b)
排队。排队(b);
while(queue.Count!=0)
{
var b=queue.Dequeue();
b、 ProcessThisLevelOnly();
//现在我们在这里进行逻辑递归
foreach(b.项目中的内部变量)
队列。排队(内部);
}
}
}

根据深度优先或广度优先,您可以使用堆栈与队列。

递归是您应该搜索的关键。到目前为止你尝试了什么?你被困在哪里了?@HimBromBeere我试过递归的方法,但还有其他有效的方法吗?@Rex define efficient;如果问题是堆栈下降:队列或堆栈