我一直在反复思考,但似乎无法找到C#闭包可变的良好理由。如果不清楚发生的情况,这只是引起一些意想不到的后果的好方法。
也许有更多知识的人可以解释一下为什么C#设计者允许闭包中的状态改变?
例如:
var foo = "hello";
Action bar = () => Console.WriteLine(foo);
bar();
foo = "goodbye";
bar();
第一次调用将打印“hello”,但是第二次调用外部状态发生了改变,会打印“goodbye”。闭包的状态已经更新以反映对局部变量的更改。