Linq 实际上在做什么?
最佳答案
(我假设这是针对 LINQ to Objects 的。其他任何内容都将以不同的方式实现:)
它只是返回第一个的所有内容,然后返回第二个的所有内容。所有数据都是流式传输的。像这样:
public static IEnumerable<T> Concat(this IEnumerable<T> source1,
IEnumerable<T> source2)
{
if (source1 == null)
{
throw new ArgumentNullException("source1");
}
if (source2 == null)
{
throw new ArgumentNullException("source1");
}
return ConcatImpl(source1, source2);
}
private static IEnumerable<T> ConcatImpl(this IEnumerable<T> source1,
IEnumerable<T> source2)
{
foreach (T item in source1)
{
yield return item;
}
foreach (T item in source2)
{
yield return item;
}
}
我已将其拆分为两种方法,以便可以快速执行参数验证,但我仍然可以使用迭代器 block 。 (在对结果第一次调用 MoveNext()
之前,不会执行迭代器 block 中的任何代码。)
关于c# - Concat() 实际上如何加入较低级别的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828268/