Универсальное решение
Вы можете создать общий метод, например, такой:
private TreeNode ConvertEntityToTreeNode<T>(
T entity,
Func<T, IEnumerable<T>> getChilds,
Func<T, TreeNode> createTreeNode)
{
TreeNode node = createTreeNode(entity);
var childs = getChilds(entity);
foreach (T child in childs)
node.Nodes.Add(ConvertEntityToTreeNode(child, getChilds, createTreeNode));
return node;
}
entity
: объект, который будет корневымв древовидной иерархии. getChilds
: выражение для получения дочерних элементов из узла. createTreeNode
: выражение для создания TreeNode
из сущности.
Затем используйте его следующим образом:
var treeNode = ConvertEntityToTreeNode(node, x => x.Children, x => new TreeNode(x.Name));
treeView1.Nodes.Add(treeNode);
Неуниверсальное решение
Вы уже нашли его самостоятельно.Это довольно просто и просто:
private TreeNode ConvertEntityToTreeNode(Node entity)
{
var node = new TreeNode(entity.Name);
foreach (var child in entity.Children)
node.Nodes.Add(ConvertEntityToTreeNode(child));
return node;
}
Тогда используйте его следующим образом:
var treeNode = ConvertEntityToTreeNode(node);
treeView1.Nodes.Add(treeNode);
Почему вам может потребоваться универсальное решение?
На всякий случай у вас есть пара классов узлов и деревьев.Алгоритм создания всегда один и тот же, вам просто нужно знать:
- Корневой объект
- Как получить дочерний объект
- Как создать
TreeNode
использование объекта
Тогда алгоритм всегда является рекурсивным алгоритмом, который вы видите в обобщенном методе.