|
@@ -2,6 +2,7 @@
|
|
|
// The .NET Foundation licenses this file to you under the Apache 2.0 License.
|
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
|
|
+using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
namespace System.Linq
|
|
@@ -26,10 +27,33 @@ namespace System.Linq
|
|
|
|
|
|
private static IEnumerable<TSource> Defer_<TSource>(Func<IEnumerable<TSource>> enumerableFactory)
|
|
|
{
|
|
|
+ /*
|
|
|
foreach (var item in enumerableFactory())
|
|
|
{
|
|
|
yield return item;
|
|
|
}
|
|
|
+ */
|
|
|
+ return new DeferEnumerable<TSource>(enumerableFactory);
|
|
|
+ }
|
|
|
+
|
|
|
+ private sealed class DeferEnumerable<TSource> : IEnumerable<TSource>
|
|
|
+ {
|
|
|
+ readonly Func<IEnumerable<TSource>> _enumerableFactory;
|
|
|
+
|
|
|
+ public DeferEnumerable(Func<IEnumerable<TSource>> enumerableFactory)
|
|
|
+ {
|
|
|
+ _enumerableFactory = enumerableFactory;
|
|
|
+ }
|
|
|
+
|
|
|
+ public IEnumerator<TSource> GetEnumerator()
|
|
|
+ {
|
|
|
+ return _enumerableFactory().GetEnumerator();
|
|
|
+ }
|
|
|
+
|
|
|
+ IEnumerator IEnumerable.GetEnumerator()
|
|
|
+ {
|
|
|
+ return GetEnumerator();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|