使用List内置递归的痕迹痕迹

时间:2013-06-20 13:40:16

标签: list recursion breadcrumbs sitemapnode

我正在尝试构建一个将由站点地图节点列表表示的痕迹路径。 根节点将是第一个,然后是子节点,孙子.......直到当前节点。我试图用递归来做这件事,但总是只得到根节点:

public static List<MvcSiteMapNode> BreadcrumbTrail(MvcSiteMapNode curr)
    {
        List<MvcSiteMapNode> t = new List<MvcSiteMapNode>();
        if (curr.ParentNode == null)
        {
            t.Add(curr);
            return t;
        }
        else
            return BreadcrumbTrail(curr.ParentNode as MvcSiteMapNode);
    }

和来电者:

var curr = SiteMap.CurrentNode as MvcSiteMapNode;

        List<MvcSiteMapNode> trail = BreadcrumbTrail(curr);

1 个答案:

答案 0 :(得分:1)

您只获得根节点,因为您只添加了根节点。您可以通过将当前节点添加到递归的结果来解决此问题。

public static List<MvcSiteMapNode> BreadcrumbTrail(MvcSiteMapNode curr)
    {
        List<MvcSiteMapNode> t;
        if (curr.ParentNode == null)
            t = new List<MvcSiteMapNode>();
        else
            t = BreadcrumbTrail(curr.ParentNode as MvcSiteMapNode);
        t.Add(curr);
        return t;
    }

应该做你正在寻找的事情