我试图了解 C# 编译器在链接 linq 方法时所做的事情,特别是在多次链接相同方法时。
简单示例:假设我正在尝试根据两个条件过滤一个整数序列。
最明显的事情是这样的:
IEnumerable<int> Method1(IEnumerable<int> input)
{
return input.Where(i => i % 3 == 0 && i % 5 == 0);
}
但是我们也可以链接 where 方法,每个方法都有一个条件:
IEnumerable<int> Method2(IEnumerable<int> input)
{
return input.Where(i => i % 3 == 0).Where(i => i % 5 == 0);
}
我在 Reflector 中查看了 IL;这两种方法显然不同,但目前进一步分析它超出了我的知识范围:)
我想知道:
a)编译器在每个实例中的不同之处,以及原因。
b)是否有任何性能影响(不是试图微优化;只是好奇!)