Использование рекурсивного метода для обхода древовидной структуры с использованием Generic в C#

#generics #recursion #tree

Вопрос:

Я пытаюсь создать класс для чтения определенного файла программного обеспечения, данные которого отображаются в древовидной структуре. Я хочу, чтобы класс прошел все дерево путем инициализации. Я использую generic в C# для разработки общего класса, потому что существуют разные типы T. Я ссылаюсь на простую древовидную структуру данных кода для использования с C#

Код выглядит так:

     public class TreeNode<T>
        {
            private readonly T _data;
            private readonly TreeNode<T> _parent;
            public readonly  List<TreeNode<T>> _children;
            private readonly int _level;
    
            public int Level { get { return _level; } }
            public int Count { get { return _children.Count; } }
            public bool IsRoot { get { return _parent == null; } }
            public bool IsLeaf { get { return _children.Count == 0; } }
            public T Data { get { return _data; } }
            public TreeNode<T> Parent { get { return _parent; } }
    
            public TreeNode(T data)
            {
                _data = data;
                _children = new List<TreeNode<T>>();
                _level = 0;
            }
    
            public TreeNode(T data, TreeNode<T> parent) : this(data)
            {
                _parent = parent;
                _level = _parent != null ? _parent.Level   1 : 0;
            }
    
            public TreeNode<T> this[int key]
            {
                get { return _children[key]; }
            }
    
            public void Clear()
            {
                _children.Clear();
            }
            public void AddChild(TreeNode<T> value)
            {
                _children.Add(value);
            }

            public TreeNode<T> GetChild(int key)
            {
                return _children[key];
            }
        }
 

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

 class CATProductObj : TreeNode<Product>
{
    public string prodName;
    public CATProductObj(Product rootProd) : base(rootProd) {
        prodName = rootProd.get_Name();
        Traverse(rootProd);
    }
    public CATProductObj(Product prod, CATProductObj parentProd) : base(prod, parentProd) {
        prodName = prod.get_Name();
    }

    public void Traverse(Product rootProd)
    {
        if (rootProd.Products.Count > 0)
        {
            for(int i=1;i<= rootProd.Products.Count; i  )
            {
                string name = this.prodName;
                AddChild(new CATProductObj(rootProd.Products.Item(i), this));
                Traverse(GetChild(i-1).Data);
            }
        }

    }
}
 

Тип Product -это тип данных из программного обеспечения.
Может кто-нибудь сказать мне, где я ошибаюсь?