Получить все родительские элементы XElement с помощью рекурсивной функции

#c# #.net

#c# #.net

Вопрос:

Я пытаюсь получить всех родителей данного XElement. Я пытался написать эту функцию, но она не работает. страница загружается бесконечно.

 public List<XElement> GetParents(XElement element)
{
    List<XElement> parentList = new List<XElement>();
    XElement cParent = element.Parent;
    while (cParent != null)
    {
        parentList.Add(cParent);
        GetParents(cParent);
    }
    return parentList;
}
 

Вызов :

 Parents = GetParents(nodeOfPage);
 

Кто-нибудь знает, как решить мою проблему?
Спасибо

Комментарии:

1. cParent находится в области действия вашей функции, поэтому он никогда не будет равен null. GetParents внутри вашего while создаст другой экземпляр cParent, который вызывающая функция не видит.

Ответ №1:

Просто вызовите .Ancestors() метод расширения.

Ответ №2:

предложение @SLaks отличное, и на вашем месте я бы обязательно его использовал, но оно не объясняет, почему ваш код не работает.

Ваш код не работает, потому что у вас бесконечный цикл while, вы никогда не меняете cParent внутри своего цикла while, поэтому он никогда не выйдет из него.

Вы можете попробовать это вместо:

  public List<XElement> GetParents(XElement element)
 {
    List<XElement> parentList = new List<XElement>();
    XElement cParent = element.Parent;
    while (cParent != null)
    {
        parentList.Add(cParent);
        cParent = cParent.Parent;
    }
    return parentList;
 }
 

Или с помощью рекурсии:

 public List<XElement> GetParents(XElement element)
 {
    XElement cParent = element.Parent;
    if (cParent == null)
    {
        return new List<XElement>();
    }
    var parents = GetParents(cParent);
    parents.Add(cParent);
    return parents;
 }