Linq.Where(x => x == 1) - 编译器在做什么

Jac*_*ada 4 c# linq

我知道Linq是defferedexecution但我想了解编译器对这样的语句做了什么以及它如何在引擎盖下工作

我发现Linq令人着迷,但我担心我不明白幕后发生了什么

Sea*_*n U 6

Where()是一个可以像下面这样实现的扩展方法:

IEnumerable<T> Where(self IEnumerable<T> sequence, Func<T, bool> predicate) 
{
    foreach(T current in sequence)
        if( predicate(current) )
            yield return current;
}
Run Code Online (Sandbox Code Playgroud)

x => x == 1是一个匿名过程,如果x == 1则返回true,否则返回false,如下所示:

bool predicate(T value)
{
    return value == 1;
}
Run Code Online (Sandbox Code Playgroud)

对于在迭代器块()如何编译的细节,有一个伟大的系列解释它们是如何开始编译这里的埃里克利珀的博客.