33// See the LICENSE file in the project root for more information.
44// Maintainer: Argo Zhang([email protected] ) Website: https://www.blazor.zone 55
6+
67namespace BootstrapBlazor . Components ;
78
89/// <summary>
910/// Tree 组件节点缓存类
1011/// </summary>
1112/// <typeparam name="TNode"></typeparam>
1213/// <typeparam name="TItem"></typeparam>
13- public class TreeNodeCache < TNode , TItem > ( Func < TItem , TItem , bool > comparer ) : ExpandableNodeCache < TNode , TItem > ( comparer ) where TNode : ICheckableNode < TItem >
14+ public class TreeNodeCache < TNode , TItem > : ExpandableNodeCache < TNode , TItem > where TNode : ICheckableNode < TItem >
1415{
16+ /// <remarks>
17+ /// 构造函数
18+ /// </remarks>
19+ public TreeNodeCache ( Func < TItem , TItem , bool > comparer ) : base ( comparer )
20+ {
21+ CheckedNodeCache = new ( 50 , EqualityComparer ) ;
22+ UncheckedNodeCache = new ( 50 , EqualityComparer ) ;
23+ IndeterminateNodeCache = new ( 50 , EqualityComparer ) ;
24+ }
25+
1526 /// <summary>
1627 /// 获得 所有选中节点集合 作为缓存使用
1728 /// </summary>
18- protected List < TItem > CheckedNodeCache { get ; } = new ( 50 ) ;
29+ protected HashSet < TItem > CheckedNodeCache { get ; }
1930
2031 /// <summary>
2132 /// 获得 所有未选中节点集合 作为缓存使用
2233 /// </summary>
23- protected List < TItem > UncheckedNodeCache { get ; } = new ( 50 ) ;
34+ protected HashSet < TItem > UncheckedNodeCache { get ; }
2435
2536 /// <summary>
2637 /// 获得 所有未选中节点集合 作为缓存使用
2738 /// </summary>
28- protected List < TItem > IndeterminateNodeCache { get ; } = new ( 50 ) ;
39+ protected HashSet < TItem > IndeterminateNodeCache { get ; }
2940
3041 /// <summary>
3142 /// 切换选中状态方法
@@ -37,35 +48,35 @@ public virtual void ToggleCheck(TNode node)
3748 if ( node . CheckedState == CheckboxState . Checked )
3849 {
3950 // 未选中节点缓存移除此节点
40- UncheckedNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
41- IndeterminateNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
51+ UncheckedNodeCache . Remove ( node . Value ) ;
52+ IndeterminateNodeCache . Remove ( node . Value ) ;
4253
4354 // 选中节点缓存添加此节点
44- if ( ! CheckedNodeCache . Any ( i => EqualityComparer . Equals ( i , node . Value ) ) )
55+ if ( ! CheckedNodeCache . Contains ( node . Value ) )
4556 {
4657 CheckedNodeCache . Add ( node . Value ) ;
4758 }
4859 }
4960 else if ( node . CheckedState == CheckboxState . UnChecked )
5061 {
5162 // 选中节点缓存添加此节点
52- CheckedNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
53- IndeterminateNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
63+ CheckedNodeCache . Remove ( node . Value ) ;
64+ IndeterminateNodeCache . Remove ( node . Value ) ;
5465
5566 // 未选中节点缓存移除此节点
56- if ( ! UncheckedNodeCache . Any ( i => EqualityComparer . Equals ( i , node . Value ) ) )
67+ if ( ! UncheckedNodeCache . Contains ( node . Value ) )
5768 {
5869 UncheckedNodeCache . Add ( node . Value ) ;
5970 }
6071 }
6172 else
6273 {
6374 // 不确定节点缓存添加此节点
64- CheckedNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
65- UncheckedNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
75+ CheckedNodeCache . Remove ( node . Value ) ;
76+ UncheckedNodeCache . Remove ( node . Value ) ;
6677
6778 // 未选中节点缓存移除此节点
68- if ( ! IndeterminateNodeCache . Any ( i => EqualityComparer . Equals ( i , node . Value ) ) )
79+ if ( ! IndeterminateNodeCache . Contains ( node . Value ) )
6980 {
7081 IndeterminateNodeCache . Add ( node . Value ) ;
7182 }
@@ -81,7 +92,7 @@ private void IsChecked(TNode node)
8192 {
8293 // 当前节点状态为未确定状态
8394 var nodes = node . Items . OfType < ICheckableNode < TItem > > ( ) ;
84- if ( CheckedNodeCache . Any ( i => EqualityComparer . Equals ( i , node . Value ) ) )
95+ if ( CheckedNodeCache . Contains ( node . Value ) )
8596 {
8697 node . CheckedState = CheckboxState . Checked ;
8798 }
@@ -99,9 +110,9 @@ void CheckChildren(IEnumerable<ICheckableNode<TItem>> nodes)
99110 {
100111 if ( nodes . Any ( ) )
101112 {
102- CheckedNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
103- UncheckedNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
104- IndeterminateNodeCache . RemoveAll ( i => EqualityComparer . Equals ( i , node . Value ) ) ;
113+ CheckedNodeCache . Remove ( node . Value ) ;
114+ UncheckedNodeCache . Remove ( node . Value ) ;
115+ IndeterminateNodeCache . Remove ( node . Value ) ;
105116
106117 // 查看子节点状态
107118 if ( nodes . All ( i => i . CheckedState == CheckboxState . Checked ) )
0 commit comments