У меня возникли проблемы с попыткой удалить элемент внутри объекта с древовидной структурой.
Мой объект, как показано ниже
TreeNode
{
string name;
ObservableCollection<TreeNode> Children;
}
Я думал, что если я рекурсивно обработаю дерево, найду свой узел и удалю его, но столкнулся с проблемой.
Я сделал что-то вроде
Обновлено:
DeleteNode(ObservableCollection<TreeNode> children, TreeNode nodetodelete)
{
if(children.remove(nodetodelete))
{
return;
}
else
{
foreach(var child in children)
{
DeleteNode(child, nodetodelete);
}
}
}
Пока я писал код, я понял, что в конечном итоге столкнусь с исключением манипуляции при переборе коллекции, которая может быть изменена.
Я мог бы создать гигантское изменение циклов for, поскольку я точно знаю максимальную глубокую длину ( который я сделал для заполнителя), но это кажется очень плохим. . . .
Может ли кто-нибудь указать мне лучшее общее направление. Мне как бы интересно, является ли моя структура данных причиной этого.
Обновлять:
Это будет выглядеть ужасно и немного пахнуть кодом, но я заставил рекурсию «работать», выбрасывая исключение, когда я нахожу свой узел.
DeleteNode(children, nodetodelete)
{
if(children.remove(nodetodelete)
{
throw FoundException();
}
else
{
foreach(var child in children)
{
DeleteNode(child, nodetodelete)
}
}
}
Есть ли другой способ выйти из рекурсии.