А как сейчас с работой?
Во, нашёл самый простой (наверное) пример: https://www.simplethread.com/c-closures-explained/
public static Func<int,int> GetAFunc() { var myVar = 1; Func<int, int> inc = delegate(int var1) { myVar = myVar + 1; return var1 + myVar; }; return inc; }
Вот где про него рассказывают можно посмотреть. Суть в том что в созданное замыкание для inc попадает не значение myVar а ссылка не него. В результате в самой лямбде мы не только можем поменять значение myVar (что тоже хреново - "незаметный" канал для обмена данными) но и если myVar поменяет значение снаружи лямбды, она радостно начнёт использовать новое значение.
В чём проблема? В незаметных и хрен пойми как возникающих ошибках. (напомню, что в функциональных языках вообще переменных "как бы нет", т.е. они есть, но только на крайний случай :))
Описал лямбду, погнал код дальше, и через 20 строк поменял значение переменной, которую в лямбде использовал. А потом где-то вызывается лямбда и вместо +1 увеличивает на 123. Ой.