@@ -28,8 +28,7 @@ public class InteractiveList : InteractiveValue, ICellPoolDataSource<CacheListEn
28
28
private bool IsWritableGenericIList ;
29
29
private PropertyInfo genericIndexer ;
30
30
31
- public int ItemCount => values . Count ;
32
- private readonly List < object > values = new List < object > ( ) ;
31
+ public int ItemCount => cachedEntries . Count ;
33
32
private readonly List < CacheListEntry > cachedEntries = new List < CacheListEntry > ( ) ;
34
33
35
34
public ScrollPool < CacheListEntryCell > ListScrollPool { get ; private set ; }
@@ -53,7 +52,6 @@ public override void ReleaseFromOwner()
53
52
private void ClearAndRelease ( )
54
53
{
55
54
RefIList = null ;
56
- values . Clear ( ) ;
57
55
58
56
foreach ( var entry in cachedEntries )
59
57
{
@@ -70,14 +68,14 @@ public override void SetValue(object value)
70
68
if ( value == null )
71
69
{
72
70
// should never be null
73
- if ( values . Any ( ) )
71
+ if ( cachedEntries . Any ( ) )
74
72
ClearAndRelease ( ) ;
75
73
}
76
74
else
77
75
{
78
76
var type = value . GetActualType ( ) ;
79
- if ( type . IsGenericType )
80
- EntryType = type . GetGenericArguments ( ) [ 0 ] ;
77
+ if ( type . TryGetGenericArguments ( out var args ) )
78
+ EntryType = args [ 0 ] ;
81
79
else if ( type . HasElementType )
82
80
EntryType = type . GetElementType ( ) ;
83
81
else
@@ -102,7 +100,6 @@ private void CacheEntries(object value)
102
100
else
103
101
IsWritableGenericIList = false ;
104
102
105
- values . Clear ( ) ;
106
103
int idx = 0 ;
107
104
108
105
if ( ReflectionUtility . TryGetEnumerator ( value , out IEnumerator enumerator ) )
@@ -113,8 +110,6 @@ private void CacheEntries(object value)
113
110
{
114
111
var entry = enumerator . Current ;
115
112
116
- values . Add ( entry ) ;
117
-
118
113
// If list count increased, create new cache entries
119
114
CacheListEntry cache ;
120
115
if ( idx >= cachedEntries . Count )
@@ -132,9 +127,9 @@ private void CacheEntries(object value)
132
127
}
133
128
134
129
// Remove excess cached entries if list count decreased
135
- if ( cachedEntries . Count > values . Count )
130
+ if ( cachedEntries . Count > idx )
136
131
{
137
- for ( int i = cachedEntries . Count - 1 ; i >= values . Count ; i -- )
132
+ for ( int i = cachedEntries . Count - 1 ; i >= idx ; i -- )
138
133
{
139
134
var cache = cachedEntries [ i ] ;
140
135
if ( cache . CellView != null )
0 commit comments