Bonjour, alors voila j'ai une liste d'item qui ont chacun un nom,un ID et un Parent ID. avec la méthode récursive j’arrive a classer ces items dans un ordre de hiérarchie mais j'aimerai en fait pouvoir exécuter une action a chaque fois que je passe a un nouveau parent. Je n'arrive pas bien a comprendre dans la récursivité ou se fait le rappel a nouveau de la fonction et comment faire une action a cette endroit.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
class Program
    {
 
        static void Main()
        {
            List<list> SPlist = new List<list>()                            // sera remplacer par la liste directement depuis sharpoint !!! 
            {
                new list() { Id = 1, Text = "Item 1", ParentId = 0},
                new list() { Id = 2, Text = "Item 2", ParentId = 0 },
                new list() { Id = 3, Text = "Item 3", ParentId = 0 },
                new list() { Id = 4, Text = "Item 1.1", ParentId = 1 },
                new list() { Id = 5, Text = "Item 3.1", ParentId = 3 },
                new list() { Id = 6, Text = "Item 1.1.1", ParentId = 4 },
                new list() { Id = 7, Text = "Item 2.1", ParentId = 2 },
                new list() { Id = 8, Text = "Item 2.1.1", ParentId = 2 },
                new list() { Id = 9, Text = "Item 2.1.1.1", ParentId = 8 }
            };
 
 
 
            List<list> hierarchy = new List<list>();
            hierarchy = SPlist        
                            .Where(c => c.ParentId == 0)
                            .Select(c => new list()
                            {
                                Id = c.Id,
                                Text = c.Text,
                                ParentId = c.ParentId,
                                Children = GetChildren(SPlist, c.Id)
                            })
                            .ToList(); 
 
            HieararchyWalk(hierarchy);
            Console.ReadLine();
 
 
        }
        public static int i = 0;
        public static List<list> GetChildren(List<list> lists, int parentId)
        {
            return lists
                    .Where(c => c.ParentId == parentId)
                    .Select(c => new list
                    {
                        Id = c.Id,
                        Text = c.Text,
                        ParentId = c.ParentId,
                        Children = GetChildren(lists, c.Id),
 
                    })
                    .ToList();
 
        }
 
 
 
 
        public static void HieararchyWalk(List<list> hierarchy)
        {
 
            if (hierarchy != null)
            {
                foreach (var item in hierarchy)
                {
                    i++;
                    Console.WriteLine(string.Format(i+"------"+"{0} {1}", item.Id, item.Text));
 
                    HieararchyWalk(item.Children);
                } 
            }
 
        }
    }
 
 
}
mon but ici serait d'avoir i qui est remis a 0 pour chaque nouveau parent et que j'ai en sorti console:

1------1 Item 1
2------4 Item 1.1
3------6 Item 1.1.1
1------2 Item 2
2------7 Item 2.1
3------8 Item 2.1.1
4------9 Item 2.1.1.1
1------3 Item 3
2------5 Item 3.1

ce qui me permettrait ensuite de connaitre le niveau de chaque element et par exemble de dire pour le niveau 1 : 1 espace le 2 : 2 espace etc et avoir :

-Item 1
-- Item 1.1
--- Item 1.1.1
-Item 2
--Item 2.1
---Item 2.1.1
----Item 2.1.1.1
-Item 3
--Item 3.1


Merci d'avance pour vos réponses et bonne journée!