@@ -66,31 +66,30 @@ public static IEnumerable<TResult> Lag<TSource, TResult>(this IEnumerable<TSourc
6666
6767 return _ ( ) ; IEnumerable < TResult > _ ( )
6868 {
69- using ( var iter = source . GetEnumerator ( ) )
69+ using var iter = source . GetEnumerator ( ) ;
70+
71+ var i = offset ;
72+ var lagQueue = new Queue < TSource > ( offset ) ;
73+ // until we progress far enough, the lagged value is defaultLagValue
74+ var hasMore = true ;
75+ // NOTE: The if statement below takes advantage of short-circuit evaluation
76+ // to ensure we don't advance the iterator when we reach the lag offset.
77+ // Do not reorder the terms in the condition!
78+ while ( i -- > 0 && ( hasMore = iter . MoveNext ( ) ) )
7079 {
71- var i = offset ;
72- var lagQueue = new Queue < TSource > ( offset ) ;
73- // until we progress far enough, the lagged value is defaultLagValue
74- var hasMore = true ;
75- // NOTE: The if statement below takes advantage of short-circuit evaluation
76- // to ensure we don't advance the iterator when we reach the lag offset.
77- // Do not reorder the terms in the condition!
78- while ( i -- > 0 && ( hasMore = iter . MoveNext ( ) ) )
79- {
80- lagQueue . Enqueue ( iter . Current ) ;
81- // until we reach the lag offset, the lagged value is the defaultLagValue
82- yield return resultSelector ( iter . Current , defaultLagValue ) ;
83- }
80+ lagQueue . Enqueue ( iter . Current ) ;
81+ // until we reach the lag offset, the lagged value is the defaultLagValue
82+ yield return resultSelector ( iter . Current , defaultLagValue ) ;
83+ }
8484
85- if ( hasMore ) // check that we didn't consume the sequence yet
85+ if ( hasMore ) // check that we didn't consume the sequence yet
86+ {
87+ // now the lagged value is derived from the sequence
88+ while ( iter . MoveNext ( ) )
8689 {
87- // now the lagged value is derived from the sequence
88- while ( iter . MoveNext ( ) )
89- {
90- var lagValue = lagQueue . Dequeue ( ) ;
91- yield return resultSelector ( iter . Current , lagValue ) ;
92- lagQueue . Enqueue ( iter . Current ) ;
93- }
90+ var lagValue = lagQueue . Dequeue ( ) ;
91+ yield return resultSelector ( iter . Current , lagValue ) ;
92+ lagQueue . Enqueue ( iter . Current ) ;
9493 }
9594 }
9695 }
0 commit comments