@@ -12,7 +12,7 @@ public class TreeTest
12
12
public void Can_BuildTree ( )
13
13
{
14
14
// arrange
15
- var list = new List < MyClass > ( )
15
+ List < MyClass > list = new ( )
16
16
{
17
17
new MyClass
18
18
{
@@ -25,38 +25,38 @@ public void Can_BuildTree()
25
25
Id = 20000
26
26
}
27
27
} ;
28
- for ( int i = 2 ; i < 1500 ; i ++ )
28
+ for ( int i = 2 ; i < 1500 ; i ++ )
29
29
{
30
30
list . Add ( new MyClass
31
31
{
32
32
Name = $ "这是第{ i } 个子节点",
33
33
Id = i ,
34
- ParentId = ( i - 1 )
34
+ ParentId = i - 1
35
35
} ) ;
36
36
}
37
37
38
- for ( int i = 20001 ; i < 40000 ; i ++ )
38
+ for ( int i = 20001 ; i < 40000 ; i ++ )
39
39
{
40
40
list . Add ( new MyClass
41
41
{
42
42
Name = $ "这是第{ i } 个子节点",
43
43
Id = i ,
44
- ParentId = ( i - 1 )
44
+ ParentId = i - 1
45
45
} ) ;
46
46
}
47
47
48
48
// act
49
- var tree = list . ToTree ( ) ;
49
+ List < MyClass > tree = list . ToTree ( ) ;
50
50
51
51
// assert
52
52
Assert . Equal ( tree [ 0 ] . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Id , 8 ) ;
53
53
Assert . Equal ( tree . Count , 2 ) ;
54
54
Assert . Equal ( tree [ 0 ] . AllChildren ( ) . Count , 1498 ) ;
55
- var a = tree . Filter ( c => c . Id == 39999 ) . ToList ( ) ;
55
+ List < MyClass > a = tree . Filter ( c => c . Id == 39999 ) . ToList ( ) ;
56
56
Assert . Equal ( a [ 0 ] . Id , 39999 ) ;
57
- var raw = tree . Flatten ( ) . ToList ( ) ;
57
+ List < MyClass > raw = tree . Flatten ( ) . ToList ( ) ;
58
58
Assert . Equal ( raw . Count , list . Count ) ;
59
- var allParent = a [ 0 ] . AllParent ( ) ;
59
+ List < MyClass > allParent = a [ 0 ] . AllParent ( ) ;
60
60
Assert . Equal ( allParent [ 0 ] . AllChildren ( ) . Count , 19999 ) ;
61
61
Assert . Equal ( a [ 0 ] . Root ( ) , list [ 1 ] ) ;
62
62
Assert . StartsWith ( "Root" , a [ 0 ] . Path ( ) ) ;
@@ -67,7 +67,7 @@ public void Can_BuildTree()
67
67
public void Can_BuildTree2 ( )
68
68
{
69
69
// arrange
70
- var list = new List < MyClass2 > ( )
70
+ List < MyClass2 > list = new ( )
71
71
{
72
72
new MyClass2
73
73
{
@@ -80,7 +80,7 @@ public void Can_BuildTree2()
80
80
Id = "20000"
81
81
}
82
82
} ;
83
- for ( int i = 2 ; i < 1500 ; i ++ )
83
+ for ( int i = 2 ; i < 1500 ; i ++ )
84
84
{
85
85
list . Add ( new MyClass2
86
86
{
@@ -90,7 +90,7 @@ public void Can_BuildTree2()
90
90
} ) ;
91
91
}
92
92
93
- for ( int i = 20001 ; i < 40000 ; i ++ )
93
+ for ( int i = 20001 ; i < 40000 ; i ++ )
94
94
{
95
95
list . Add ( new MyClass2
96
96
{
@@ -101,22 +101,70 @@ public void Can_BuildTree2()
101
101
}
102
102
103
103
// act
104
- var tree = list . ToTree ( ) ;
104
+ List < MyClass2 > tree = list . ToTree ( ) ;
105
105
106
106
// assert
107
107
Assert . Equal ( tree [ 0 ] . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Children . FirstOrDefault ( ) . Id , "8" ) ;
108
108
Assert . Equal ( tree . Count , 2 ) ;
109
109
Assert . Equal ( tree [ 0 ] . AllChildren ( ) . Count , 1498 ) ;
110
- var a = tree . Filter ( c => c . Id == "39999" ) . ToList ( ) ;
110
+ List < MyClass2 > a = tree . Filter ( c => c . Id == "39999" ) . ToList ( ) ;
111
111
Assert . Equal ( a [ 0 ] . Id , "39999" ) ;
112
- var raw = tree . Flatten ( ) . ToList ( ) ;
112
+ List < MyClass2 > raw = tree . Flatten ( ) . ToList ( ) ;
113
113
Assert . Equal ( raw . Count , list . Count ) ;
114
- var allParent = a [ 0 ] . AllParent ( ) ;
114
+ List < MyClass2 > allParent = a [ 0 ] . AllParent ( ) ;
115
115
Assert . Equal ( allParent [ 0 ] . AllChildren ( ) . Count , 19999 ) ;
116
116
Assert . Equal ( a [ 0 ] . Root ( ) , list [ 1 ] ) ;
117
117
Assert . StartsWith ( "Root" , a [ 0 ] . Path ( ) ) ;
118
118
Assert . Equal ( a [ 0 ] . Level ( ) , 20000 ) ;
119
119
}
120
+
121
+ [ Fact ]
122
+ public void Can_BuildTree3 ( )
123
+ {
124
+ // 0-1-3
125
+ // -4-5
126
+ // -2
127
+ MyClass3 tree0 = new ( )
128
+ {
129
+ Id = 0 ,
130
+ ParentId = - 1 ,
131
+ } ;
132
+ MyClass3 tree1 = new ( )
133
+ {
134
+ Id = 1 ,
135
+ ParentId = 0 ,
136
+ } ;
137
+ MyClass3 tree2 = new ( )
138
+ {
139
+ Id = 2 ,
140
+ ParentId = 0 ,
141
+ } ;
142
+ MyClass3 tree3 = new ( )
143
+ {
144
+ Id = 3 ,
145
+ ParentId = 1 ,
146
+ } ;
147
+ MyClass3 tree4 = new ( )
148
+ {
149
+ Id = 4 ,
150
+ ParentId = 1 ,
151
+ } ;
152
+ MyClass3 tree5 = new ( )
153
+ {
154
+ Id = 5 ,
155
+ ParentId = 4 ,
156
+ } ;
157
+
158
+ // 准备数据
159
+ List < MyClass3 > list = new ( ) { tree0 , tree1 , tree2 , tree3 , tree4 , tree5 } ;
160
+
161
+ // 执行
162
+ List < Tree < MyClass3 > > nodes = list . ToTreeGeneral ( c => c . Id , c => c . ParentId , - 1 ) ;
163
+
164
+ //验证
165
+ Assert . NotNull ( nodes ) ;
166
+ Assert . Equal ( 5 , nodes . Flatten ( ) . Count ( ) ) ; // 错误,返回的节点数为 2
167
+ }
120
168
}
121
169
122
170
internal class MyClass : ITree < MyClass > , ITreeEntity < MyClass , int >
@@ -173,4 +221,11 @@ internal class MyClass2 : ITree<MyClass2>, ITreeEntity<MyClass2>
173
221
/// 父级id
174
222
/// </summary>
175
223
public string ParentId { get ; set ; }
224
+ }
225
+
226
+ internal class MyClass3
227
+ {
228
+ public long Id { get ; set ; }
229
+
230
+ public long ParentId { get ; set ; }
176
231
}
0 commit comments