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