Статические анонимные функции
Оказывается, в C# 9 лямбды получили серьёзное обновление!
Штука настолько малоизвестная, что меня даже ни разу не спрашивали про неё на собесах!
Допустим, у вас есть следующий код с замыканием:
Захват переменной
С помощью ключевого слова
Тогда, обновлённый код не скомпилируется:
Однако, если очень нужно иметь возможность использовать
Оказывается, в 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;