c# - 需要有关树状结构数据检索的帮助

标签 c# .net algorithm

我有一个 HierarchyNode 类型的“高级对象”,它将具有相同类型 HierarchyNode 的子节点(每个子节点可能有它们的子节点)。

我应该从“高级对象”中读取请求的父节点的子节点。所以我的代码如下(调用者——superiorObject.IdentifySubNodeOfRequestedNode(...))。但是 stopRecursiveCall 在 foreach 循环中是 false eventthough 如果循环被执行并且也不是所有代码返回值异常。如何解决这个问题并返回子节点或者是否有其他更好的解决方案来解决这个问题?谢谢

public List<HierarchyNode> IdentifySubNodeOfRequestedNode(int reqstedId, Boolean stopRecursiveCall)
{
    if (this.UserId == reqstedId)
    {
        stopRecursiveCall = true;
        return this.ChildNodes;
    }

    foreach (HierarchyNode childNode in this.ChildNodes)
    {
         childNode.IdentifySubNodeOfRequestedNode(reqstedId, stopRecursiveCall);
         if (stopRecursiveCall)
             break;
    }
}

最佳答案

不需要 bool

public class HierarchyNode
{
    private decimal UserId;
    private List<HierarchyNode> ChildNodes;

    public List<HierarchyNode> IdentifySubNodeOfRequestedNode(int reqstedId)
    {
        if (this.UserId == reqstedId)
        {
            return this.ChildNodes;
        }

        return this.ChildNodes.
            Select(childNode => childNode.IdentifySubNodeOfRequestedNode(reqstedId)).
            FirstOrDefault(children => children != null);
    }
}

关于c# - 需要有关树状结构数据检索的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207132/

相关文章:

c# - 延迟加载不调用函数

c# - 在带有母版页的 asp.net c# 中使用更新面板为转发器控件启用浏览器后退按钮

c# - 将 LambdaExpression 转换为带装箱返回值的类型化 Expression<Func<T, object>>

java - 查询路线建议的图形实现

C# 不可变整数

c# - 使用反射判断一个方法是否为 'extern'

c# - FormClosing 需要新线程吗?

.net - ASHX HTTP 处理程序和表单例份验证

arrays - 将全为零的给定数组转换为目标数组

algorithm - O(1)算法确定节点是否是多路树中另一个节点的后代?