След с использованием встроенной рекурсии List

Я пытаюсь построить цепочку, которая будет представлена ​​списком узлов карты сайта. сначала будет корневой узел, затем дочерний элемент, внук....... до текущего узла. Я пытаюсь сделать это с помощью рекурсии, но всегда получаю только корневой узел:

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 ответ

Решение

Вы получаете только корневой узел, потому что вы только добавляете корневой узел. Вы можете исправить это, также добавив текущий узел к результату рекурсии.

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;
    }

должен делать то, что вы ищете

Другие вопросы по тегам