Lambda expression offers a way to wrap a function without complex definitions.
The compiler creates an anonymous class for a Lambda expression at runtime and creates an instance when it is called. Any variable accessed insided the Lambda will be accessed at the time the instance is created.
int v = 3;
Func<int, int> f = s => s+v;
v = 5;
WriteLine($"The return value of f(0) is {f(0)}");
You may expect a 5 instead of 3.