Для данного узла в дереве я пытаюсь найти его наивысшего предка (или самого узла), но без пересечения определенного "барьера" в дереве (определенного типа узла) - если есть такой «барьерный» узел. Если нет узла «барьер», я хочу вернуть верхний узел в дереве.
Звучит сложнее, чем есть - вот код:
public Node GetHighestRelevantAncestorOrSelf(Node node)
{
Node topNode = node;
bool newTopNodeFound;
do
{
Node newTopNode = GetParent(topNode);
newTopNodeFound = (newTopNode != null && !IsBarrierNode(newTopNode));
if (newTopNodeFound)
{
topNode = newTopNode;
}
} while (newTopNodeFound);
return topNode;
}
Есть ли лучший способ написать это, то есть без оценки "newTopNodeFound" дважды? Может быть, используя цикл for?