C# 与 C++ 的一个显著差异在于:C# 的 lambda 表达式不能像 C++ 那样手动指定捕获方式(引用或传值),默认情况下捕获的是引用,而非值的副本。要实现传值效果,需要在 lambda 内部显式创建一个局部变量来保存当前值。
由于循环的每次迭代都会创建一个独立的局部变量 K,每个 lambda 表达式引用的是各自迭代中的 K,而不是共享同一个外部变量 i。这样就避免了直接捕获 i 导致所有表达式最终输出同一个值(i 的最终值)的问题。
PS:玩惯了 C++,C# 的这些机制还不太习惯。