Optimise LinqBridge.Enumerable.Where

This commit is contained in:
Jon Hanna
2017-01-04 15:48:12 +00:00
parent c003ad0d98
commit 896448860a
+10 -1
View File
@@ -158,11 +158,20 @@ namespace Newtonsoft.Json.Utilities.LinqBridge
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
CheckNotNull(source, "source");
CheckNotNull(predicate, "predicate");
return source.Where((item, i) => predicate(item));
return WhereYield(source, predicate);
}
private static IEnumerable<TSource> WhereYield<TSource>(
IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
foreach (var item in source)
if (predicate(item))
yield return item;
}
/// <summary>
/// Filters a sequence of values based on a predicate.
/// Each element's index is used in the logic of the predicate function.