Próbuję zawrzeć w głowie to, co robi kompilator C#, gdy używam metod linq, szczególnie w przypadku wielokrotnego łączenia tej samej metody.Zrozumienie, w jaki sposób kompilator C# radzi sobie z metodami łańcuchowymi linq
Prosty przykład: Załóżmy, że próbuję filtrować sekwencję zmiennych na podstawie dwóch warunków.
Najbardziej oczywistą rzeczą do zrobienia jest coś takiego:
IEnumerable<int> Method1(IEnumerable<int> input)
{
return input.Where(i => i % 3 == 0 && i % 5 == 0);
}
Ale mógłby również łańcuch metod, gdzie z jednego stanu w każdy:
IEnumerable<int> Method2(IEnumerable<int> input)
{
return input.Where(i => i % 3 == 0).Where(i => i % 5 == 0);
}
miałem spójrz na IL w Reflectorze; to jest oczywiście różna dla obu metod, ale analizując go dalej jest poza moją wiedzą w tej chwili :)
chciałbym dowiedzieć się:
a) co kompilator robi się inaczej w każdym przypadku, i dlaczego.
b) istnieją jakiekolwiek implikacje wydajności (nie próbując mikro-optimize!; Po prostu ciekawy)
Dobra odpowiedź. Potrzebujemy więcej takich materiałów na Stackoverflow. –