在《C#高级编程》一书中提到通过Lambda表达式可以访问Lambda表达式块外部的变量 ,这是一个很好的功能(类似Js中的 闭包)。但是如果没有正确的使用,会非常危险。
比如下面的事例中
int someVal = 5;
Fun f = x => x + someVal;
Console.WriteLine(f(3));
我们这个表达式的本意是返回一个数x+5的结果。所以f(3)的结果应该是 3 + someVal = 8。
但是如果以后在不经意中修改了someVal的值,则会出现我们意想不到的结果。
比如: