@@ -24,7 +24,7 @@ internal sealed class TrackingItem : ITrackingItem
24
24
25
25
public TrackingItemState State { get ; private set ; }
26
26
27
- public IReadOnlyList < ChangedValue > ChangedValues => cachedChangedValues ??= CalculateChangedValues ( ) . ToList ( ) . AsReadOnly ( ) ;
27
+ public IReadOnlyList < ChangedValue > ChangedValues => cachedChangedValues ??= CalculateChangedValues ( ) ;
28
28
29
29
public void MergeWith ( TrackingItem source )
30
30
{
@@ -47,29 +47,33 @@ public void MergeWith(TrackingItem source)
47
47
State = source . State ;
48
48
}
49
49
50
- private IEnumerable < ChangedValue > CalculateChangedValues ( )
50
+ private IReadOnlyList < ChangedValue > CalculateChangedValues ( )
51
51
{
52
52
var originalValues = RawData . Origin ;
53
53
var changedValues = RawData . Difference ;
54
54
55
- if ( State == TrackingItemState . Created ) {
55
+ if ( State == TrackingItemState . Created ) {
56
56
originalValues = null ;
57
57
changedValues = RawData . Origin ;
58
58
}
59
59
60
- foreach ( var field in Key . TypeInfo . Fields . Where ( f => f . Column != null ) ) {
60
+ var changedValuesList = new List < ChangedValue > ( Key . TypeInfo . Fields . Count ) ;
61
+
62
+ foreach ( var field in Key . TypeInfo . Fields . Where ( f => f . Column != null ) ) {
61
63
object origValue = null , changedValue = null ;
62
64
int fieldIndex = field . MappingInfo . Offset ;
63
65
TupleFieldState fieldState ;
64
- if ( originalValues != null )
66
+ if ( originalValues != null )
65
67
origValue = originalValues . GetValue ( fieldIndex , out fieldState ) ;
66
- if ( changedValues != null ) {
68
+ if ( changedValues != null ) {
67
69
changedValue = changedValues . GetValue ( fieldIndex , out fieldState ) ;
68
70
if ( ! fieldState . IsAvailable ( ) )
69
71
continue ;
70
72
}
71
- yield return new ChangedValue ( field , origValue , changedValue ) ;
73
+ changedValuesList . Add ( new ChangedValue ( field , origValue , changedValue ) ) ;
72
74
}
75
+
76
+ return changedValuesList . AsReadOnly ( ) ;
73
77
}
74
78
75
79
private void MergeWith ( Tuple difference )
0 commit comments