Найти элемент в многоуровневом списке и добавить к нему новый уровень

Не получается написать функцию, которая бы принимала на вход 2 аргумента Func(ObservableCollection<Node> список, строковое_значение_для_поиска), искала по всем вложенным спискам и в случае совпадения Name добавляла еще один уровень данных.

public class Node
{
    public string Name { get; set; }
    public ObservableCollection<Node> Child { get; set; }
}
ObservableCollection<Node> nodes;
nodes = new ObservableCollection<Node>
{
    new Node
    {
        Name = "1.1",
    },
    new Node
    {
        Name = "1.2",
        Child = new ObservableCollection<Node>
        {
            new Node {Name="2.1" },
            new Node {Name="2.2" },
            new Node {Name="2.3" },
        }
    },
};

Я понимаю, что она должна рекурсивно обходить все уровни, но у меня ничего не выходит. После добавления должно быть примерно так.

nodes = new ObservableCollection<Node>
{
    new Node
    {
        Name = "1.1",
    },
    new Node
    {
        Name = "1.2",
        Child = new ObservableCollection<Node>
        {
            new Node {Name="2.1" },
            new Node {Name="2.2" },
            //После добавления
            new Node 
            {
                Name="2.3",
                Child = new ObservableCollection<Node> 
                {
                    new Node {Name = "3" } 
                }
            }
        }
    },
};

Ответы (1 шт):

Автор решения: Alexey Vesker

Если решать в лоб то можно так:

void FindAndAdd(ObservableCollection<Node> listOfNode, string nodeName)
{
    for(int iter =0; iter < listOfNode.Count; iter++)
    {
        if(listOfNode[iter].Name == nodeName)
        { listOfNode[iter].Child.Add(new Node(){"x.x"}); }
        else
        { FindAndAdd(listOfNode.Child, nodeName) ; }
    }
} 

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

→ Ссылка