C# .NetCore简单实现无限递归的功能

时间:2023-03-08 21:58:59

1:在实际开发中,我们会经常使用到无限递归的情况,如菜单,父子级等的情况

2:Code

 1 using System;
2 using System.Collections.Generic;
3 using ConsoleApp1.Models;
4 using System.Linq;
5 using Newtonsoft.Json;
6 namespace ConsoleApp1
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 var allData = GetListData();
13 var parentNode = allData.Where(p => p.PParentId == 0).ToList();
14 List<PersonModel> tree = new List<PersonModel>();
15 foreach (var item in parentNode)
16 {
17 PersonModel p1 = new PersonModel { Children = new List<PersonModel> { } };
18 int _id = item.ID;
19 p1.ID = _id;
20 p1.Pname = item.Pname;
21 p1.Age = item.Age;
22 p1.PParentId = item.PParentId;
23 GetNewNodes(allData, p1);
24 tree.Add(p1);
25 }
26 string jsonTree = JsonConvert.SerializeObject(tree, Formatting.Indented);
27 Console.WriteLine(jsonTree);
28 Console.ReadKey();
29 }
30
31 static void GetNewNodes(List<PersonModel> all, PersonModel curItem)
32 {
33 var subItems = all.Where(c => c.PParentId == curItem.ID).ToList();
34 curItem.Children = new List<PersonModel>();
35 curItem.Children.AddRange(subItems);
36 foreach (var subItem in subItems)
37 {
38 GetNewNodes(all, subItem);
39 }
40 }
41 static List<PersonModel> GetListData()
42 {
43 return new List<PersonModel> {
44 new PersonModel{ID=1001,Age=68,Pname="QQ1",PParentId=0 },
45 new PersonModel{ID=1002,Age=78,Pname="ww",PParentId=0 },
46 new PersonModel{ID=1003,Age=67,Pname="dd",PParentId=0 },
47 new PersonModel{ID=1004,Age=88,Pname="ff",PParentId=0 },
48
49 new PersonModel{ID=1005,Age=18,Pname="gg",PParentId=1001},
50 new PersonModel{ID=1006,Age=16,Pname="cc",PParentId=1003},
51 new PersonModel{ID=1007,Age=17,Pname="aa",PParentId=1006},
52 new PersonModel{ID=1008,Age=19,Pname="tt",PParentId=1007},
53 new PersonModel{ID=1009,Age=20,Pname="ii",PParentId=1004},
54 new PersonModel{ID=1010,Age=22,Pname="ggf",PParentId=1003}
55 };
56 }
57 }
58 }

3:测试ok截图

C# .NetCore简单实现无限递归的功能