我有一个Node
类 public class Node
{
public string Header { get; set; }
public string Number { get; set; }
public List<Node> Nodes { get; set; }
}
嵌套级别是四个级别。我想要实现的是在任何嵌套列表中查找字符串下面的函数。这是一个功能:
public string getNumber(List<Node> currentList, string name)
{
string number = string.Empty;
foreach (var item in currentList)
{
if (item.Header == name)
{
number = item.Number;
return number;
}
}
if (number == string.Empty)
{
foreach (var item in currentList)
{
number = getNumber(item.Nodes, name);
return number;
}
}
return null;
}
它遍历列表中第一个项目的第一个嵌套列表,但不是其余项目嵌套列表。任何人都可以给我一个暗示我的错误在哪里?
感谢。
答案 0 :(得分:2)
您需要检查递归调用是否找到带有空检查的数字,否则您只检查第一个项目的子列表。另外,您不需要初始化number
以清空或在第一个foreach
之后检查它,因为如果找到匹配项,您就已经返回了。如果您确实在初始列表中找到匹配项,则甚至不需要将其设置为number
,因此您甚至不需要该变量直到您的第二个foreach
。< / p>
public string getNumber(List<Node> currentList, string name)
{
foreach (var item in currentList)
{
if (item.Header == name)
{
return item.Number;
}
}
foreach (var item in currentList)
{
string number = getNumber(item.Nodes, name);
if (number != null)
{
return number;
}
}
return null;
}
另外,您可能想要考虑搜索内容的顺序。目前,这将按以下顺序进行搜索
-1
- 3
--- 5
--- 6
- 4
--- 7
-2
- 8
其中破折号代表深度。