Skip to content

Commit cdc6f76

Browse files
authored
Replace using statements with declarations
This is a squashed merge of PR morelinq#622.
1 parent 3d44f73 commit cdc6f76

21 files changed

+298
-320
lines changed

MoreLinq/Backsert.cs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,29 +67,27 @@ public static IEnumerable<T> Backsert<T>(this IEnumerable<T> first, IEnumerable<
6767

6868
return _(); IEnumerable<T> _()
6969
{
70-
using (var e = first.CountDown(index, ValueTuple.Create)
71-
.GetEnumerator())
70+
using var e = first.CountDown(index, ValueTuple.Create).GetEnumerator();
71+
72+
if (e.MoveNext())
7273
{
73-
if (e.MoveNext())
74-
{
75-
var (_, countdown) = e.Current;
76-
if (countdown is int n && n != index - 1)
77-
throw new ArgumentOutOfRangeException(nameof(index), "Insertion index is greater than the length of the first sequence.");
74+
var (_, countdown) = e.Current;
75+
if (countdown is int n && n != index - 1)
76+
throw new ArgumentOutOfRangeException(nameof(index), "Insertion index is greater than the length of the first sequence.");
7877

79-
do
78+
do
79+
{
80+
T a;
81+
(a, countdown) = e.Current;
82+
if (countdown == index - 1)
8083
{
81-
T a;
82-
(a, countdown) = e.Current;
83-
if (countdown == index - 1)
84-
{
85-
foreach (var b in second)
86-
yield return b;
87-
}
88-
89-
yield return a;
84+
foreach (var b in second)
85+
yield return b;
9086
}
91-
while (e.MoveNext());
87+
88+
yield return a;
9289
}
90+
while (e.MoveNext());
9391
}
9492
}
9593
}

MoreLinq/CountMethods.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public static int CompareCount<TFirst, TSecond>(this IEnumerable<TFirst> first,
180180
bool firstHasNext;
181181
bool secondHasNext;
182182

183-
using (var e1 = first.GetEnumerator())
183+
using var e1 = first.GetEnumerator();
184184
using (var e2 = second.GetEnumerator())
185185
{
186186
do

MoreLinq/EndsWith.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public static bool EndsWith<T>(this IEnumerable<T> first, IEnumerable<T> second,
8282

8383
bool Impl(IEnumerable<T> snd, int count)
8484
{
85-
using (var firstIter = first.TakeLast(count).GetEnumerator())
86-
return snd.All(item => firstIter.MoveNext() && comparer.Equals(firstIter.Current, item));
85+
using var firstIter = first.TakeLast(count).GetEnumerator();
86+
return snd.All(item => firstIter.MoveNext() && comparer.Equals(firstIter.Current, item));
8787
}
8888
}
8989
}

MoreLinq/Exclude.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,16 @@ public static IEnumerable<T> Exclude<T>(this IEnumerable<T> sequence, int startI
4545
{
4646
var index = -1;
4747
var endIndex = startIndex + count;
48-
using (var iter = sequence.GetEnumerator())
49-
{
50-
// yield the first part of the sequence
51-
while (iter.MoveNext() && ++index < startIndex)
52-
yield return iter.Current;
53-
// skip the next part (up to count items)
54-
while (++index < endIndex && iter.MoveNext())
55-
continue;
56-
// yield the remainder of the sequence
57-
while (iter.MoveNext())
58-
yield return iter.Current;
59-
}
48+
var iter = sequence.GetEnumerator();
49+
// yield the first part of the sequence
50+
while (iter.MoveNext() && ++index < startIndex)
51+
yield return iter.Current;
52+
// skip the next part (up to count items)
53+
while (++index < endIndex && iter.MoveNext())
54+
continue;
55+
// yield the remainder of the sequence
56+
while (iter.MoveNext())
57+
yield return iter.Current;
6058
}
6159
}
6260
}

MoreLinq/FullJoin.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -239,18 +239,17 @@ public static IEnumerable<TResult> FullJoin<TFirst, TSecond, TKey, TResult>(
239239
var key = firstKeySelector(fe);
240240
firstKeys.Add(key);
241241

242-
using (var se = secondLookup[key].GetEnumerator())
242+
using var se = secondLookup[key].GetEnumerator();
243+
244+
if (se.MoveNext())
245+
{
246+
do { yield return bothSelector(fe, se.Current); }
247+
while (se.MoveNext());
248+
}
249+
else
243250
{
244-
if (se.MoveNext())
245-
{
246-
do { yield return bothSelector(fe, se.Current); }
247-
while (se.MoveNext());
248-
}
249-
else
250-
{
251-
se.Dispose();
252-
yield return firstSelector(fe);
253-
}
251+
se.Dispose();
252+
yield return firstSelector(fe);
254253
}
255254
}
256255

MoreLinq/GroupAdjacent.cs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -271,31 +271,30 @@ static IEnumerable<TResult> GroupAdjacentImpl<TSource, TKey, TElement, TResult>(
271271
Debug.Assert(resultSelector != null);
272272
Debug.Assert(comparer != null);
273273

274-
using (var iterator = source.GetEnumerator())
275-
{
276-
var group = default(TKey);
277-
var members = (List<TElement>) null;
274+
using var iterator = source.GetEnumerator();
275+
276+
var group = default(TKey);
277+
var members = (List<TElement>) null;
278278

279-
while (iterator.MoveNext())
279+
while (iterator.MoveNext())
280+
{
281+
var key = keySelector(iterator.Current);
282+
var element = elementSelector(iterator.Current);
283+
if (members != null && comparer.Equals(group, key))
280284
{
281-
var key = keySelector(iterator.Current);
282-
var element = elementSelector(iterator.Current);
283-
if (members != null && comparer.Equals(group, key))
284-
{
285-
members.Add(element);
286-
}
287-
else
288-
{
289-
if (members != null)
290-
yield return resultSelector(group, members);
291-
group = key;
292-
members = new List<TElement> { element };
293-
}
285+
members.Add(element);
286+
}
287+
else
288+
{
289+
if (members != null)
290+
yield return resultSelector(group, members);
291+
group = key;
292+
members = new List<TElement> { element };
294293
}
295-
296-
if (members != null)
297-
yield return resultSelector(group, members);
298294
}
295+
296+
if (members != null)
297+
yield return resultSelector(group, members);
299298
}
300299

301300
static IGrouping<TKey, TElement> CreateGroupAdjacentGrouping<TKey, TElement>(TKey key, IList<TElement> members)

MoreLinq/Insert.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,19 @@ public static IEnumerable<T> Insert<T>(this IEnumerable<T> first, IEnumerable<T>
5959
{
6060
var i = -1;
6161

62-
using (var iter = first.GetEnumerator())
63-
{
64-
while (++i < index && iter.MoveNext())
65-
yield return iter.Current;
62+
using var iter = first.GetEnumerator();
6663

67-
if (i < index)
68-
throw new ArgumentOutOfRangeException(nameof(index), "Insertion index is greater than the length of the first sequence.");
64+
while (++i < index && iter.MoveNext())
65+
yield return iter.Current;
6966

70-
foreach (var item in second)
71-
yield return item;
67+
if (i < index)
68+
throw new ArgumentOutOfRangeException(nameof(index), "Insertion index is greater than the length of the first sequence.");
7269

73-
while (iter.MoveNext())
74-
yield return iter.Current;
75-
}
70+
foreach (var item in second)
71+
yield return item;
72+
73+
while (iter.MoveNext())
74+
yield return iter.Current;
7675
}
7776
}
7877
}

MoreLinq/Lag.cs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

MoreLinq/Lead.cs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,24 @@ public static IEnumerable<TResult> Lead<TSource, TResult>(this IEnumerable<TSour
6565
return _(); IEnumerable<TResult> _()
6666
{
6767
var leadQueue = new Queue<TSource>(offset);
68-
using (var iter = source.GetEnumerator())
68+
var iter = source.GetEnumerator();
69+
70+
bool hasMore;
71+
// first, prefetch and populate the lead queue with the next step of
72+
// items to be streamed out to the consumer of the sequence
73+
while ((hasMore = iter.MoveNext()) && leadQueue.Count < offset)
74+
leadQueue.Enqueue(iter.Current);
75+
// next, while the source sequence has items, yield the result of
76+
// the projection function applied to the top of queue and current item
77+
while (hasMore)
6978
{
70-
bool hasMore;
71-
// first, prefetch and populate the lead queue with the next step of
72-
// items to be streamed out to the consumer of the sequence
73-
while ((hasMore = iter.MoveNext()) && leadQueue.Count < offset)
74-
leadQueue.Enqueue(iter.Current);
75-
// next, while the source sequence has items, yield the result of
76-
// the projection function applied to the top of queue and current item
77-
while (hasMore)
78-
{
79-
yield return resultSelector(leadQueue.Dequeue(), iter.Current);
80-
leadQueue.Enqueue(iter.Current);
81-
hasMore = iter.MoveNext();
82-
}
83-
// yield the remaining values in the lead queue with the default lead value
84-
while (leadQueue.Count > 0)
85-
yield return resultSelector(leadQueue.Dequeue(), defaultLeadValue);
79+
yield return resultSelector(leadQueue.Dequeue(), iter.Current);
80+
leadQueue.Enqueue(iter.Current);
81+
hasMore = iter.MoveNext();
8682
}
83+
// yield the remaining values in the lead queue with the default lead value
84+
while (leadQueue.Count > 0)
85+
yield return resultSelector(leadQueue.Dequeue(), defaultLeadValue);
8786
}
8887
}
8988
}

MoreLinq/MaxBy.cs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -308,34 +308,33 @@ static IEnumerable<TSource> ExtremaBy<TSource, TKey, TStore>(
308308

309309
IEnumerable<TSource> Extrema()
310310
{
311-
using (var e = source.GetEnumerator())
312-
{
313-
if (!e.MoveNext())
314-
return new List<TSource>();
311+
using var e = source.GetEnumerator();
312+
313+
if (!e.MoveNext())
314+
return new List<TSource>();
315315

316-
var store = extrema.New();
317-
extrema.Add(ref store, limit, e.Current);
318-
var extremaKey = selector(e.Current);
316+
var store = extrema.New();
317+
extrema.Add(ref store, limit, e.Current);
318+
var extremaKey = selector(e.Current);
319319

320-
while (e.MoveNext())
320+
while (e.MoveNext())
321+
{
322+
var item = e.Current;
323+
var key = selector(item);
324+
var comparison = comparer(key, extremaKey);
325+
if (comparison > 0)
321326
{
322-
var item = e.Current;
323-
var key = selector(item);
324-
var comparison = comparer(key, extremaKey);
325-
if (comparison > 0)
326-
{
327-
extrema.Restart(ref store);
328-
extrema.Add(ref store, limit, item);
329-
extremaKey = key;
330-
}
331-
else if (comparison == 0)
332-
{
333-
extrema.Add(ref store, limit, item);
334-
}
327+
extrema.Restart(ref store);
328+
extrema.Add(ref store, limit, item);
329+
extremaKey = key;
330+
}
331+
else if (comparison == 0)
332+
{
333+
extrema.Add(ref store, limit, item);
335334
}
336-
337-
return extrema.GetEnumerable(store);
338335
}
336+
337+
return extrema.GetEnumerable(store);
339338
}
340339
}
341340

0 commit comments

Comments
 (0)