小编hjo*_*ort的帖子

为什么在LINQ扩展方法中使用包装器实际的迭代器函数?

在查看Microsoft的各种C#LINQ方法的实现时,我注意到公共扩展方法仅仅是包装器,它以单独的迭代器函数的形式返回实际的实现.

例如(来自System.Linq.Enumerable.cs):

public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) {
    if (first == null) throw Error.ArgumentNull("first");
    if (second == null) throw Error.ArgumentNull("second");
    return ConcatIterator<TSource>(first, second); 
}

static IEnumerable<TSource> ConcatIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second) { 
    foreach (TSource element in first) yield return element;
    foreach (TSource element in second) yield return element; 
}
Run Code Online (Sandbox Code Playgroud)

包装迭代器的原因是什么,而不是将它们合并为一个并直接返回迭代器?

像这样:

public static IEnumerable<TSource> Concat<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second) {
    if (first == null) throw Error.ArgumentNull("first");
    if (second == null) throw Error.ArgumentNull("second");
    foreach (TSource element in first) yield …
Run Code Online (Sandbox Code Playgroud)

c# linq iterator

6
推荐指数
1
解决办法
58
查看次数

标签 统计

c# ×1

iterator ×1

linq ×1