@@ -6,13 +6,36 @@ namespace SuperLinq;
6
6
public static partial class SuperEnumerable
7
7
{
8
8
/// <summary>
9
- /// Creates an enumerable sequence based on an enumerable factory function.
9
+ /// Creates an enumerable sequence based on an enumerable factory function.
10
10
/// </summary>
11
- /// <typeparam name="TResult">Result sequence element type.</typeparam>
12
- /// <param name="enumerableFactory">Enumerable factory function.</param>
13
- /// <returns>Sequence that will invoke the enumerable factory upon iteration.</returns>
14
- /// <exception cref="ArgumentNullException"><paramref name="enumerableFactory"/> is <see
15
- /// langword="null"/>.</exception>
11
+ /// <typeparam name="TResult">
12
+ /// Result sequence element type.
13
+ /// </typeparam>
14
+ /// <param name="enumerableFactory">
15
+ /// Enumerable factory function.
16
+ /// </param>
17
+ /// <returns>
18
+ /// Sequence that will invoke the enumerable factory upon iteration.
19
+ /// </returns>
20
+ /// <exception cref="ArgumentNullException">
21
+ /// <paramref name="enumerableFactory"/> is <see langword="null"/>.
22
+ /// </exception>
23
+ /// <exception cref="ArgumentNullException">
24
+ /// (Thrown lazily) The sequence <c>source</c> returned by <paramref name="enumerableFactory"/> is <see
25
+ /// langword="null"/>.
26
+ /// </exception>
27
+ /// <remarks>
28
+ /// <para>
29
+ /// <paramref name="enumerableFactory"/> is not run until the sequence returned by <see
30
+ /// cref="Defer{TResult}(Func{IEnumerable{TResult}})"/> is enumerated. At enumeration, <paramref
31
+ /// name="enumerableFactory"/> is executed and the sequence returned is enumerated in a streaming manner and
32
+ /// values are returned similarly.
33
+ /// </para>
34
+ /// <para>
35
+ /// <paramref name="enumerableFactory"/> is executed each time the sequence returned by <see
36
+ /// cref="Defer{TResult}(Func{IEnumerable{TResult}})"/> is enumerated.
37
+ /// </para>
38
+ /// </remarks>
16
39
public static IEnumerable < TResult > Defer < TResult > ( Func < IEnumerable < TResult > > enumerableFactory )
17
40
{
18
41
Guard . IsNotNull ( enumerableFactory ) ;
@@ -21,7 +44,10 @@ public static IEnumerable<TResult> Defer<TResult>(Func<IEnumerable<TResult>> enu
21
44
22
45
static IEnumerable < TResult > Core ( Func < IEnumerable < TResult > > enumerableFactory )
23
46
{
24
- foreach ( var el in enumerableFactory ( ) )
47
+ var source = enumerableFactory ( ) ;
48
+ Guard . IsNotNull ( source ) ;
49
+
50
+ foreach ( var el in source )
25
51
yield return el ;
26
52
}
27
53
}
0 commit comments