/// <summary>
/// 绑定快捷键树的方法
/// </summary>
/// <param name="nodes">节点集合</param>
/// <returns>返回节点集合</returns>
private List<PublicDepartNodes> Bind(List<PublicDepartNodes> nodes)
{
//最顶级的父节点ID,是父节点的CID
//这块需要注意,如果你需要最顶级父节点那么这块的g就是最顶级父节点的PId,现在需求不需要,所以g就是最顶级父节点的CID
string g = "00000000-0000-0000-0000-000000000000";
Guid guid = new Guid(g);
List<PublicDepartNodes> outputList = new List<PublicDepartNodes>();
for (int i = 0; i <
nodes.Count; i++)
{
if (nodes[i].PId == guid)
{
outputList.Add(nodes[i]);
}
else
{
FindDownward(nodes, nodes[i].PId).Nodes.Add(nodes[i]);
}
}
return outputList;
}
/// <summary>
/// 更具父节点向下寻找子节点
/// </summary>
/// <param name="nodes">节点集合</param>
/// <param name="id">父节点id</param>
/// <returns>返回节点对象</returns>
private PublicDepartNodes FindDownward(List<PublicDepartNodes> nodes, Guid id)
{
if (nodes == null)
{
return null;
}
for (int i = 0; i < nodes.Count; i++)
{
if (nodes[i].Id == id)
{
return nodes[i];
}
else
{
PublicDepartNodes node = FindDownward(nodes[i].Nodes, id);
if (node != null)
{
return node;
}
}
}
这个该怎么解决啊 我觉得我做的这个没有无线递归啊?
List<PublicDepartNodes> nodes 怎么构造的?
我猜测是两个node为相互子节点了。
是吗?那该怎么办啊
@丫头2: 调用Bind函数的参数是哪来的?就是要看生成参数的函数。
@Firen:
@丫头2: 就是我添加的时候 递归还不会出错 就是一修改某一天数据的话,就会错了
堆栈移除就是递归太多次了(大部分情况下,)
检查下递归退出条件你下面那个递归代码有无限递归的可能
可是我之前修改的时候 绑定树的都能出来,就是添加了一条新数据后,就出现在这个问题了
是数据的问题吗?
检查下方法 FindDownward 的各个分支是否都有 return 机制。
有的啊