私は、linq メソッドをチェーンしているときに、特に同じメソッドを複数回チェーンしているときに、C# コンパイラが何をするかについて頭を悩ませようとしています。
簡単な例: 2 つの条件に基づいて一連の int をフィルター処理しようとしているとします。
最も明白なことは、次のようなことです。
IEnumerable<int> Method1(IEnumerable<int> input)
{
return input.Where(i => i % 3 == 0 && i % 5 == 0);
}
ただし、where メソッドを連鎖させて、それぞれに 1 つの条件を指定することもできます。
IEnumerable<int> Method2(IEnumerable<int> input)
{
return input.Where(i => i % 3 == 0).Where(i => i % 5 == 0);
}
Reflector の IL を見てみました。2つの方法では明らかに異なりますが、それをさらに分析することは、現時点では私の知識を超えています:)
私は次のことを知りたい:
a)コンパイラが各インスタンスで異なる動作をすることと、その理由。
b)パフォーマンスへの影響はありますか(マイクロ最適化を試みているのではなく、ただ興味があります!)