Статические анонимные функции



Оказывается, в C# 9 лямбды получили серьёзное обновление!



Штука настолько малоизвестная, что меня даже ни разу не спрашивали про неё на собесах!



Допустим, у вас есть следующий код с замыканием:



int y = 1;

Func<int, int> lambda = x => x + y;




Захват переменной y и всего внешнего окружения вызовет ненужные аллокации.



С помощью ключевого слова static можно запретить подобные ситуации.



Тогда, обновлённый код не скомпилируется:



int y = 1;

Func<int, int> lambda = static x => x + y;




Однако, если очень нужно иметь возможность использовать y, но при этом сохранять эффективность кода, то переменную просто надо сделать константой:



const int y = 1;

Func<int, int> lambda = static x => x + y;